学习JavaScript设计模式(五)
2017-03-20 21:39
495 查看
Mixin(混入)模式
代码复用:最常见的方式时继承,但是继承会让子类获得父类的所有属性和方法。即使子类只使用到很少的一部分属性或方法。Mixin 模式就是解决这一问题:实现部分继承(从父类继承所需要的一部分属性或方法)和多重继承。
Mixin 模式实际上就是一种属性的复制。例如我们常用的 JQuery 中的 extend 方法就是实现这一模式。
简单代码实现:
/** * Created by Zang on 2017/3/20. */ var Car = function (setting) { this.model = setting.model || 'no model'; this.color = setting.color || 'no color'; }; function augment(recive, source) { if (arguments[2]) { for (var i = 2; i < arguments.length; i++) { recive.prototype[arguments[i]] = source.prototype[arguments[i]]; } } else { for (var key in source.prototype) { if (!recive.prototype[key]) { recive.prototype[key] = source.prototype[key]; } } } } var Mixin = function () { }; Mixin.prototype = { sayHello: function () { console.log('hello'); }, sayHi: function () { console.log('hi'); } }; // 增加特定的方法 augment(Car, Mixin, 'sayHello'); var car1 = new Car({ model: 'car1', color: 'blue' }); car1.sayHello(); // hello // car1.sayHi(); // car1.sayHi is not a function // 增加所有的方法 augment(Car, Mixin); var car2 = new Car({ model: 'car2', color: 'blue' }); car2.sayHello(); // hello car2.sayHi(); // hi
优点:有助于减少系统中的重复功能及增加函数复用。
缺点:有些开发人员认为将功能注入到对象原型中是一种很糟糕的想法,因为他会导致原型污染和函数起源方面的不确定性。
Decorator(装饰者)模式
Decorator 模式并不是严格依赖创建对象的方式,而是关注扩展其额外功能。基本思想:向基本对象添加(装饰)属性或方法,而不是进行子类化,因此它较为精简。
简单代码实现:
/** * Created by Zang on 2017/3/20. */ function MacBook() { this.size = 13; this.ram = 4; } function Ram(macbook, num) { macbook.ram += num; } function Size(macbook, num) { macbook.size += num; } // 17英寸4GB内存 var macbook1 = new MacBook(); Size(macbook1, 4); // MacBook {size: 17, ram: 4} console.log(macbook1); // 15英寸16GB内存 var macbook2 = new MacBook(); Size(macbook2, 2); Ram(macbook2, 12); // MacBook {size: 15, ram: 16} console.log(macbook2);
优点:开发人员喜欢使用它,因为它使用时可以时透明的,并且也是相当灵活。
缺点:如果管理不当,它会极大的复杂化引用程序架构。
相关文章推荐
- JavaScript 设计模式学习 Factory
- javascript设计模式学习笔记之“类式继承”
- JavaScript学习记录——《学用 JavaScript 设计模式》学习笔记(2)单例模式
- 【学习笔记javascript设计模式与开发实践(闭包和高阶函数)----3】
- 学习javascript设计模式之单例模式
- javascript 设计模式之单体模式 面向对象学习基础
- js设计模式学习之面向对象的javascript(三)--原型式继承
- JavaScript学习记录——《学用 JavaScript 设计模式》学习笔记(3)观察者模式
- javascript学习(9)——[设计模式]单例
- 【学习笔记javascript设计模式与开发实践(this、call和apply)----2】
- 学习心得:javascript模式设计之工厂模式
- js设计模式学习之面向对象的javascript(一)
- Javascript 设计模式学习笔记(2) - 继承(Inheritance) (上)
- Javascript学习------设计模式(1)
- JavaScript设计模式学习——Basic Function
- javascript 模式设计之工厂模式学习心得
- javascript学习笔记(九) js对象 设计模式
- javascript 设计模式学习
- 学习javascript设计模式之代理模式
- 学习javascript设计模式之装饰者模式