Skip to content

Commit 2c9ea87

Browse files
committed
invoker with singleton
1 parent 42f64aa commit 2c9ea87

File tree

4 files changed

+116
-68
lines changed

4 files changed

+116
-68
lines changed

ES6/let_const.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -193,5 +193,5 @@ export function constFunc() {
193193
/*---------------------------------------------------------------------*/
194194
}
195195

196-
letFunc();
197-
constFunc();
196+
// letFunc();
197+
// constFunc();

designPattern/singleton.js

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
function makeInvoker(func) {
2+
var result;
3+
if (result) {
4+
return result;
5+
}
6+
const operators = Array.prototype.slice.call(arguments, 1, arguments.length)
7+
result = func.apply(this, operators);
8+
return result
9+
}
10+
function generator(...operators) {
11+
function invoke(...args) {
12+
let _this;
13+
operators.forEach(operator => {
14+
_this = operator.apply(this, args)
15+
});
16+
return _this;
17+
}
18+
19+
return invoke
20+
}
21+
const insert = function (target, num) {
22+
target.count = num;
23+
return obj;
24+
}
25+
// 只运行一次
26+
const increase = function (target) {
27+
++target.count
28+
return target;
29+
}
30+
31+
const decrease = function (target) {
32+
--target.count;
33+
return target;
34+
}
35+
36+
let invoker = makeInvoker(generator, insert, increase, decrease, increase, increase, increase)
37+
let invoker2 = makeInvoker(generator, insert, decrease, increase, increase)
38+
let obj = {};
39+
let count = 1;
40+
let result = invoker(obj, count);
41+
let result2 = invoker2(obj, count);
42+
console.log(result)
43+
console.log(result2 === result)

designPattern/watcher.js

+66-66
Original file line numberDiff line numberDiff line change
@@ -3,69 +3,69 @@
33
* 观察者模式 订阅模式
44
*
55
* */
6-
// function PubSub() {
7-
// this.handlers = {};
8-
// }
9-
// PubSub.prototype = {
10-
// // 订阅事件
11-
// on: function(eventType, handler){
12-
// var self = this;
13-
// if(!(eventType in self.handlers)) {
14-
// self.handlers[eventType] = [];
15-
// }
16-
// self.handlers[eventType].push(handler);
17-
// console.log(self.handlers.A);
18-
// debugger;
19-
// return this;
20-
// },
21-
// // 触发事件(发布事件)
22-
// emit: function(eventType){
23-
// var self = this;
24-
// var handlerArgs = Array.prototype.slice.call(arguments,1);
25-
// for(var i = 0; i < self.handlers[eventType].length; i++) {
26-
// self.handlers[eventType][i].apply(self,handlerArgs);
27-
// }
28-
// return self;
29-
// },
30-
// // 删除订阅事件
31-
// off: function(eventType, handler){
32-
// var currentEvent = this.handlers[eventType];
33-
// var len = 0;
34-
// if (currentEvent) {
35-
// len = currentEvent.length;
36-
// for (var i = len - 1; i >= 0; i--){
37-
// if (currentEvent[i] === handler){
38-
// currentEvent.splice(i, 1);
39-
// }
40-
// }
41-
// }
42-
// return this;
43-
// }
44-
// };
45-
//
46-
// var pubsub = new PubSub();
47-
// var callback = function(data){
48-
// console.log('第一次没有被删除事件',data);
49-
// };
50-
//
51-
// //订阅事件A 注册
52-
// pubsub.on('A', function(data){
53-
// console.log(1 + data);
54-
// });
55-
// pubsub.on('A', function(data){
56-
// console.log(2 + data);
57-
// });
58-
// pubsub.on('A', callback);
59-
//
60-
// //触发事件A
61-
// pubsub.emit('A', '我是参数','123');
62-
// // 1我是参数
63-
// // 2我是参数
64-
// // 第一次没有被删除事件 我是参数
65-
//
66-
// //删除事件A的订阅源callback
67-
// pubsub.off('A', callback);
68-
//
69-
// pubsub.emit('A', '我是第二次调用的参数');
70-
// //1我是第二次调用的参数
71-
// //2我是第二次调用的参数
6+
function PubSub() {
7+
this.handlers = {};
8+
}
9+
PubSub.prototype = {
10+
// 订阅事件
11+
on: function (eventType, handler) {
12+
var self = this;
13+
if (!(eventType in self.handlers)) {
14+
self.handlers[eventType] = [];
15+
}
16+
self.handlers[eventType].push(handler);
17+
return this;
18+
},
19+
// 触发事件(发布事件)
20+
emit: function (eventType) {
21+
var self = this;
22+
var handlerArgs = Array.prototype.slice.call(arguments, 1);
23+
for (var i = 0; i < self.handlers[eventType].length; i++) {
24+
self.handlers[eventType][i].apply(self, handlerArgs);
25+
}
26+
return self;
27+
},
28+
// 删除订阅事件
29+
off: function (eventType, handler) {
30+
var currentEvent = this.handlers[eventType];
31+
var len = 0;
32+
if (currentEvent) {
33+
len = currentEvent.length;
34+
for (var i = len - 1; i >= 0; i--) {
35+
if (currentEvent[i] === handler) {
36+
currentEvent.splice(i, 1);
37+
}
38+
}
39+
}
40+
return this;
41+
}
42+
};
43+
44+
function test() {
45+
var pubsub = new PubSub();
46+
var callback = function (data) {
47+
console.log('第一次没有被删除事件', data);
48+
};
49+
50+
//订阅事件A 注册
51+
pubsub.on('A', function (data) {
52+
console.log(1 + data);
53+
});
54+
pubsub.on('A', function (data) {
55+
console.log(2 + data);
56+
});
57+
pubsub.on('A', callback);
58+
59+
//触发事件A
60+
pubsub.emit('A', '我是参数', '123');
61+
// 1我是参数
62+
// 2我是参数
63+
// 第一次没有被删除事件 我是参数
64+
65+
//删除事件A的订阅源callback
66+
pubsub.off('A', callback);
67+
68+
pubsub.emit('A', '我是第二次调用的参数');
69+
//1我是第二次调用的参数
70+
//2我是第二次调用的参数
71+
}

src/index.js

+5
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,10 @@
1414

1515
import ES6 from '../ES6'
1616

17+
// designPattern - watcher pattern
18+
import watcher from '../designPattern/watcher'
19+
20+
// designPattern - singleton pattern
21+
import singleton from "../designPattern/singleton"
1722

1823

0 commit comments

Comments
 (0)