在业务需求中,会有一个相同的结果,但会用到不用的算法。比如商场打折促销,结果都是给商品打折,但是打折的方式不一样。算法不一样。所以就要用策略者模式,用类把这些算法封装起来,建立一个简单工厂,然后在用一个context类来与客户端做交流。如:
package effective.Strategist;
public class CashContext {
private CashSuper cash;//具有相同行为抽象的类
public CashContext(CashSuper cashSuper){
this.cash=cashSuper;
}
public double getResult(double money){
return cash.acceptCash(money);
}
public static void main(String[] args) {
CashContext cc = null;
String aa = "1";//比如这是与客户端接收的请求参数
switch(aa){
case "1": cc = new CashContext(new CashRebute());//相同行为的不同实现
case "2": cc = new CashContext(new CashReturn());
case "3": cc = new CashContext(new CashNormal());
}
}
}
这样的好处就是在处理中,客户端只要跟
CashContext 做交流就行,免去了与CashSuper的三个子类做交互。从而降低了耦合