设计模式心得:策略模式 (strategy pattern)

来源:互联网 发布:内向者适合做淘宝吗 编辑:程序博客网 时间:2024/05/28 15:03

Strategy模式: stragegy可以是任意的方法,如shopping cart中算discount, 算sum的方法,或是汽车的启动方法,或是鸭子飞的方法。 最终要解决的问题是:在这些方法对于不同对象实现不一致时,应该如何设计类。 比如,算discount, category 1的discount是5%, category 2是10% + $5,等等.


具体实现,将方法抽离出来成为接口, 如CalculateDiscount interface, 有若干个实现

public class Category1Discount implements CalculateDiscount {public double discount(int price) {return 0.05 * price;}}

public class Category2Discount implements CalculateDiscount {public double discount(int price) {return 0.1 * price + 10;}}

不同的item组装不同的discount方法:

public class Item {      int price;      double findFinalPrice() {return calculator.discount(price);}    CalculateDiscount calculator;  void setCalculator(CalculateDiscount newCalculator) { calculator = newCalculator;}    //some other methods}

item1 实现:

public class Item1 extends Item {Item1(int _price) {price = _price;calculator = new Category1Discount();}}

通过这种方法,可以随时添加/更改策略 (写其他实现CalculateDiscount的类),随时添加Item,或是更改item的具体计价方法。

核心内容,面向接口编程,多实现多组合,少继承。

附图一张:



0 0
原创粉丝点击