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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值