javascript设计模式之Decorator(装饰者)模式
2015-10-08 16:30
627 查看
Decorator是一种结构型设计模式,用于促进代码复用,是一种可行的对象子类化的替代方案。Decorator提供了将行为动态添加到系统现有类的能力。其想法是,装饰者本身对于类原有的基本功能来说并不是必要的;否则,它就可以合并到超类本身。
装饰者可以用于修改现有的系统,希望在系统中为对象添加额外的功能,而不需要大量修改使用它们的底层代码。开发人员使用装饰者的一个原因是,应用程序可能包含需要大量不同类型对象的功能。
Decorator模式并不严重依赖于创建对象的方式,而是关注扩展其额外功能。我们使用了一个单一的基本对象并逐步添加提供额外功能的Decorator对象,而不是仅仅依赖于原型继承。这个想法是:向基本对象添加属性或者方法,而不是进行子类化 ,因此它较为精简。
在JavaScript中向对象添加新属性是一个非常简单的过程:
使用多个装饰者装饰对象:
装饰行为并没有重写原始MacBook对象的构造函数方法,原来的MacBook依然保持不变并完好无损。
装饰者可以用于修改现有的系统,希望在系统中为对象添加额外的功能,而不需要大量修改使用它们的底层代码。开发人员使用装饰者的一个原因是,应用程序可能包含需要大量不同类型对象的功能。
Decorator模式并不严重依赖于创建对象的方式,而是关注扩展其额外功能。我们使用了一个单一的基本对象并逐步添加提供额外功能的Decorator对象,而不是仅仅依赖于原型继承。这个想法是:向基本对象添加属性或者方法,而不是进行子类化 ,因此它较为精简。
在JavaScript中向对象添加新属性是一个非常简单的过程:
function Vehicle(vehicleType){ this.vehicleType = vehicleType || "car"; this.model="default"; } var truck = new Vehicle("truck"); //给truck装饰新功能 truck.setModel = function (modelName){ this.model = modelName; }
使用多个装饰者装饰对象:
function MacBook(){ this.cost = function(){ return 997; } this.screenSize = function(){ return 13; } } //Decorator 1 function Memory(macbook){ var v = macbook.cost(); macbook.cost = function (){ return v + 75; } } //Decorator 2 function Engraving (macbook) { var v = macbook.cost(); macbook.cost = function(){ return v + 200; } } var mb = new MacBook(); Memory(mb); Engraving(mb);
装饰行为并没有重写原始MacBook对象的构造函数方法,原来的MacBook依然保持不变并完好无损。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 深入浅出23种设计模式
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- JavaScript设计模式之外观模式实例