设计模式(2)
1.代理模式
代理模式即为一个对象提供一个代用品或者占位符,以便控制它的访问。当对象1不方便直接访问对象2或者不满足需求的时候,提供一个替身对象3来访问对象2,替身对象3对请求做出一些处理后,再把请求转交给本体对象1。
作用:在某些情况下可以起到保护访问对象和节约成本的作用。
实例如下:
// 邓哥让成哥帮忙转交花给一个女神 // 对象成哥,拿到邓哥的花后执行函数reserve() var chengge = { reserve: function (target, flower) { target.listenhappy(function () { target.reserve(flower) }) } } // 对象邓哥,自己私用变量送给谁:"xiaohua",送什么:"向日葵" var dengge = { getFlower: "向日葵", girl: new Girl("xiaohua"), chengge: chengge, sendFlower: function () { var flowers = this.getFlower; var girl = this.girl; var target = this.chengge; target.reserve(girl, flowers) } } // 构造函数Girl可new一个被访问对象 function Girl(name) { return { girlName: name, // 收到花后的响应 reserve: function (flower) { console.log(this.girlName + "收到:" + flower) }, // 监听自己心情 listenhappy: function (fn) { setTimeout(() => { console.log(this.girlName + "心情好了") fn() }, 2000) } } } // 邓哥将🌺给到成哥后,成哥转交给女神 dengge.sendFlower(chengge)
2.迭代器模式
提供一个方法去顺序访问一个聚合对象中的元素,而不暴露该对象的内部表示
实例如下:
// 提供一种方法顺序去访问一个聚合对象中的各个元素,而且不暴露该对象的内部表示 var arr = [3, 5, 2], index = 0, len = arr.length var iterator = function (obj) { return { next: function () { if (this.hasnext) { var item = obj[index]; index++ return item } else { return false; } }, hasnext: function () { return index < len; }, current: function () { return obj[index - 1] } } } var arriterator = iterator(arr) console.log(arriterator.next()); // 3 console.log(arriterator.next()); // 5 console.log(arriterator.next()); // 2 console.log(arriterator.current()); // 2 console.log(arriterator.next()); // undefined
3.工厂模式
个人理解是一个实例对象可以调用各种方法来给自己添加属性,功能,使之成为一类产品
实例如下:
// 造车工厂1 function CarFactory() { } CarFactory.BMW = function () { this.name = "宝马" } CarFactory.Benz = function () { this.name = "奔驰" } CarFactory.Audi = function () { this.name = "奥迪" } CarFactory.prototype.drive = function () { return "该批次" + this.name + "添加了自动驾驶功能" } CarFactory.create = function (carName) { if (typeof (CarFactory[carName]) === "undefined") { console.log("无法建造" + carName) return false } if (typeof (CarFactory[carName].prototype.drive) !== "function") { CarFactory[carName].prototype = new CarFactory() } var newCar = new CarFactory[carName]; return newCar } console.log(new CarFactory()) var car = CarFactory.create("BMW") console.log(car.drive()) //造车工厂2 function CarFactory(carName) { this[carName] = function () { this.name = carName } } CarFactory.prototype.drive = function () { return "该批次" + this.name + "添加了自动驾驶功能" } CarFactory.create = function (carName) { if (typeof (CarFactory[carName]) === "undefined") { console.log("无法建造" + carName) return false } if (typeof (CarFactory[carName].prototype.drive) !== "function") { CarFactory[carName].prototype = new CarFactory() } var newCar = new CarFactory[carName]; return newCar } var mycar = new CarFactory("BMW") console.log(car)