下面代码中添加了两种新的方式:
1、扩展上下文的方式:
优点:
(1)所有策略的实现风格统一,策略需要的数据都统一从上下文来获取,这样在使用方法上也很统一
(2)在上下文添加新的数据,别的相应算法也可以用得上,可以视为公共的数据
缺点:
(1)如果只有一个特定的算法来使用这些数据,那么这些数据有些浪费
(2)每次添加新的算法都去扩展上下文,容易形成复杂的上下文对象层次
2、在策略算法的实现上添加自己需要的数据的方式:
优点:比较好想,实现简单
缺点:
(1)跟其他策略实现的风格不一致
(2)外部使用这些策略算法的时候也不一样,不太好以一个统一的方式来动态切换策略算法
//工资支付接口
public interface PaymentStrategy {
public void pay(PaymentContext ctx);
}
//人民币现金支付
public class RMBCash implements PaymentStrategy {
public void pay(PaymentContext ctx)
{
System.out.println("现在给"+ctx.getUserName()+"人民币现金支付"+ctx.getMoney()+"元");
}
}
//美元现金支付
public class DollarCash