JS常见的四种设计模式
1 ⼯⼚模式
简单的⼯⼚模式可以理解为解决多个相似的问题;
function CreatePerson(name,age,sex) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sex = sex;
obj.sayName = function(){
return this.name;
}
return obj;
}
var p1 = new CreatePerson("longen",'28','男');
var p2 = new CreatePerson("tugenhua",'27','⼥');
console.log(p1.name); // longen
console.log(p1.age);  // 28
console.log(p1.sex);  // 男
console.log(p1.sayName()); // longen
console.log(p2.name);  // tugenhua
console.log(p2.age);  // 27
console.log(p2.sex);  // ⼥
console.log(p2.sayName()); // tugenhua
2单例模式
只能被实例化(构造函数给实例添加属性与⽅法)⼀次
// 单体模式
var Singleton = function(name){
this.name = name;
};
Name = function(){
return this.name;
}
// 获取实例对象
var getInstance = (function() {
var instance = null;
return function(name) {
if(!instance) {//相当于⼀个⼀次性阀门,只能实例化⼀次
instance = new Singleton(name);
}
return instance;
}
})();
// 测试单体模式的实例,所以a===b
var a = getInstance("aa");
var b = getInstance("bb");
3 沙箱模式
将⼀些函数放到⾃执⾏函数⾥⾯,但要⽤闭包暴露接⼝,⽤变量接收暴露的接⼝,再调⽤⾥⾯的值,否则⽆法使⽤⾥⾯的值let sandboxModel=(function(){
function sayName(){};
function sayAge(){};
return{
sayName:sayName,
sayAge:sayAge
}
})()
4 发布者订阅模式
就例如如我们关注了某⼀个,然后他对应的有新的消息就会给你推送,
//发布者与订阅模式
var shoeObj = {}; // 定义发布者
shoeObj.list = []; // 缓存列表存放订阅者回调函数
// 增加订阅者
shoeObj.listen = function(fn) {
shoeObj.list.push(fn); // 订阅消息添加到缓存列表
}
// 发布消息
for (var i = 0, fn; fn = this.list[i++];) {
fn.apply(this, arguments);//第⼀个参数只是改变fn的this,
}
}
// ⼩红订阅如下消息
shoeObj.listen(function(color, size) {
console.log("颜⾊是:" + color);
console.log("尺码是:" + size);
});
// ⼩花订阅如下消息
shoeObj.listen(function(color, size) {
console.log("再次打印颜⾊是:" + color);
js argumentsconsole.log("再次打印尺码是:" + size);
});
代码实现逻辑是⽤数组存贮订阅者, 发布者回调函数⾥⾯通知的⽅式是遍历订阅者数组,并将发布者内容传⼊订阅者数组更多设计模式请戳:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。