赞
踩
public class SaleDemo {
public void sale(String code) {
if ("家电".equals(code)) {
// 买家电送家电
} else if ("蔬菜".equals(code)) {
// 买蔬菜送蔬菜
} else if ("水果".equals(code)) {
// 买水果送水果
} else if ("衣服".equals(code)) {
// 买衣服送衣服
} else {
// 。。。大促销,买啥送啥
}
}
}
这还是只是一个空架子,里面在加点逻辑,看起来就比较低端,怎么办?上干货。
public interface SaleStrategy {
public void doThing();
}
public class BuyDQ implements SaleStrategy{
@Override
public void doThing() {
// 买家电送家电
System.out.println("买家电送家电");
}
}
public class BuySC implements SaleStrategy{
@Override
public void doThing() {
// 买蔬菜送蔬菜
System.out.println("买蔬菜送蔬菜");
}
}
public class BuyYF implements SaleStrategy{
@Override
public void doThing() {
// 买衣服送衣服
System.out.println("买衣服送衣服");
}
}
对示例进行第一次优化,如下:
public class SaleDemo { public void sale(String code) { SaleStrategy strategy = null; if ("家电".equals(code)) { strategy = new BuyDQ(); } else if ("蔬菜".equals(code)) { strategy = new BuySC(); } else if ("衣服".equals(code)) { strategy = new BuyYF(); } else { // 。。。大促销,买啥送啥 } strategy.doThing(); } }
咋一看,没什么变法,只是将具体实现提出来,if-else还在。再来!!!第二次优化
public class StrategyFactory { static Map<String, SaleStrategy> map; static { map = new HashMap<>(); map.put("DQ", new BuyDQ()); map.put("SC", new BuySC()); map.put("YF", new BuyYF()); } private StrategyFactory() { } public static StrategyFactory getInstance() { StrategyFactory factory = new StrategyFactory(); return factory; } public SaleStrategy getApi(String code) { return map.get(code); } }
public class StrategyDemoService {
public void strategyService(String code) {
SaleStrategy api = StrategyFactory.getInstance().getApi(code);
api.doThing();
}
}
改造完成,实际调用处不见if-else,是不是感觉高端一点呢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。