1工厂模式==>可以理解为解决相同的问题使用同一个方法
function Cre(name, age, sex) {
function Obj() {
this.name = name;
this.age = age;
this.sex = sex;
Obj.prototype.sayName = function () {
console.log(this.name);
console.log(this.age);
console.log(this.sex);
}
}
return new Obj(name, age, sex)
}
var p1 = Cre('xxx', 22, '22')
p1.sayName()
var p2 = Cre('aaa', 33, '33')
p2.sayName()2.单例模式==>可以理解为在整个程序的运行过程中,只有一个实例,该实例有则使用原有的实例,无就创建
var Person = (function () {
var instance = null; //保存创建出来的实例
var Singleton = function (name) {
this.name = name;
Singleton.prototype.getName = function () {
return this.name;
}
};
return function () {
if (!instance) {
return instance = new Singleton()
}
return instance}
})()
var p1 = Person()
var p2 = Person()
console.log(p1===p2); //打印true3.沙箱模式==>将一些函数放到自执行函数里面,但要用闭包暴露接口,用变量接收暴露的接口,再调用里面的值,否则无法使用里面的值
let sandboxModel=(function(){
function sayName(){};
return{
sayName:sayName,
}
})()
4.观察者模式
核心步骤:
1.提供一个发布者(信息的发布者)
2.提供观察者(发布者发布信息后需要采取行动的人)
3.注册观察者
4.发布者发布信息
代码实现逻辑是用数组存贮订阅者, 发布者回调函数里面通知的方式是遍历订阅者数组,并将发布者内容传入
女神:(rose)
男生1:jack
男生2:tom
结构:1个发布者,2个观察者,关注的是一个状态
// 1.提供一个发布者(信息的发布者)
var rose = {user:[], //存储订阅者回调方法
//增加订阅者方法
addUser:function (fn) {
if (typeof fn != "function") {
throw "不支持!";
}
this.user.push(fn);
},
//删除订阅者
removeUser : function (fn) {
for (var i = 0; i < this.user.length; i++) {
if(this.user[i] == fn) {
this.user.splice(i,1);
}
}
},
// 发布者用来发布的状态的方法(例如肚子饿了)
eat : function () {
for (var i = 0; i < this.user.length; i++) {
this.user[i]();
}
}
}
// 2.提供观察者(发布者发布信息后需要采取行动的人)
var jack = {eat_jack : function () {
console.log("邀请女神吃麻辣烫!-jack");
}
};
var tom = {eat_tom : function () {
console.log("邀请女神吃火锅!-tom");
}
};
// 3.注册观察者
rose.addUser(jack.eat_jack);rose.addUser(tom.eat_tom);
// 4.发布者发布信息rose.eat();
console.log("----");//
5.移出观察者rose.removeUser(jack.eat_jack);
rose.eat();