Javascript Patterns--读书笔记10 (Decorator)
2012-10-11 22:19
375 查看
Decorator模式是指可以在运行的时候让一些功能附加到对象上,当在静态类语言中实现的时候,也许不那么容易,但是在JS中,我们借助于它自己的语言特性,可以很容易的让其实现这种模式
应用场景
让我们来看一个这个模式应用的例子,假若你现在正在做一个卖东西的web应用。假设每一件新的商品,我们都抽像为一sale object,我们可以通过sale.getPrice()来得到商品的价格。假定这样一个场景,一个顾客在加拿大的Qubec省买了这样一件产品,那么他需要交纳联邦政府的税,还需要交纳Qubec省的税。我们可以这样来应用decorate模式,用联邦政府税decorator和Qubec省税deocraor来decorate它。我们来看下面的示例代码.
而在另一个场景中,那个购买者可能是另外一个省的,而这个省对这件商品是不征税的,而不过它在结算的时候,用的是加拿大元,而不再是美元,那让我们来看下面的代码:
View Code
应用场景
让我们来看一个这个模式应用的例子,假若你现在正在做一个卖东西的web应用。假设每一件新的商品,我们都抽像为一sale object,我们可以通过sale.getPrice()来得到商品的价格。假定这样一个场景,一个顾客在加拿大的Qubec省买了这样一件产品,那么他需要交纳联邦政府的税,还需要交纳Qubec省的税。我们可以这样来应用decorate模式,用联邦政府税decorator和Qubec省税deocraor来decorate它。我们来看下面的示例代码.
var sale = new Sale(100);//商品的价格是100 sale = sale.decorate('fedtax');//联邦征税 sale = sale.decorate('quebec');//省征税 sale = sale.decorate('money');//加上税以后的价格 sale.getPrice();//112.88
而在另一个场景中,那个购买者可能是另外一个省的,而这个省对这件商品是不征税的,而不过它在结算的时候,用的是加拿大元,而不再是美元,那让我们来看下面的代码:
View Code
function Sale(price) { this.price = (price >0) || 100; this.decorators_list = []; } Sale.decorators = {}; Sale.decorators.fedtax = { getPrice: function(price) { return price + price * 5 / 100; } }; Sale.decorators.quebec = { getPrice: function(price) { return price + price * 7.5 / 100; } }; Sale.decorators.money = { getPrice: function(price) { return "$" + price.toFixed(2); } }; Sale.prototype.deocrate = function (decorator) { this.decorators_list.push(decorator); }; Sale.prototype.getPrice = function () { var price = this.price, i, max = this.decorators_list.length, name; for(i =0; i < max; i+=1) { name = this.decorators_list[i]; price = Sale.decorators[name].getPrice(price); } return price; };
相关文章推荐
- Javascript Patterns--读书笔记10 (Strategy)
- Javascript Patterns--读书笔记8 (Factory)
- Javascript Patterns--读书笔记9 (Iterator)
- Javascript Patterns--读书笔记7 (singleton)
- Javascript Patterns--读书笔记6 (Code Reuse)
- Javascript Patterns--读书笔记3 ( Literal and Constructors )
- 《Head First设计模式》 读书笔记10 迭代器与组合模式 The Iterator and Composite Patterns
- 深入理解javascript原型和闭包(10)——this
- 读书笔记:JavaScript DOM 编程艺术(第二版)
- 读书笔记--SQL必知必会10--分组数据
- [读书笔记]javascript编程艺术——CH5 javascript编程原则和良好习惯
- 《编写可维护的 JavaScript》读书笔记第9章:将配置数据从代码中分离出来
- 原生JavaScript技巧大收集(1~10)
- 读书笔记:分布式敏捷开发 - Distributed Agile Development at Microsoft patterns & practices
- 《Head First Design Patterns》读书笔记之状态模式
- 分享原生JavaScript技巧大收集(1~10)
- Solaris 10 Advance Administrator 310-202 读书笔记 第一章 Describing Interface Configuration-2
- 《Head First design patterns》读书笔记
- 《Small Memory Software:Patterns For System With Limited Memory》读书笔记