3.2 策略模式的UML图,如下:
4.1 策略接口Strategy
public interface IStrategy { public void getPrice();//抽奖的具体方式 }
//具体策略A public class ConcreteStrategyA implements IStrategy { @Override public void getPrice() { System.out.println("========抽奖方式A======="); } }
//策略B public class ConcreteStrategyB implements IStrategy { @Override public void getPrice() { System.out.println("========抽奖方式B======="); } }
4.3 环境类Context
/** * 环境类---》生成具体的策略 */ public class Context { private IStrategy strategy; public Context(IStrategy strategy){ this.strategy = strategy; } public Context(){} //利用简单工程方式,生产策略的具体实例 public void createStrategy(String strategy){ try { this.strategy = (IStrategy) Class.forName(strategy).newInstance(); } catch (Exception e) { e.printStackTrace(); } } public void getPrice(){ strategy.getPrice(); } }
4.4 客户端Client
public class Client { public static void main(String[] args) { doGetPrice(); } public static void doGetPrice(){ Context context = new Context(new ConcreteStrategyA()); context.getPrice(); //通过反射机制创建策略实例,降低环境类的耦合 Context context2 = new Context(); context2.createStrategy("com.jimi.test.designpattern.strategy.activity.ConcreteStrategyB"); context2.getPrice(); } }
原文地址:http://blog.csdn.net/guixuecheng/article/details/44854781