Java设计模式之策略模式
首先定义一个策略接口
public interface IStrategy {//定义具体策略必须具有的方法public void doSomething();}
定义子类实现接口
public class ConcreteStrategy1 implements IStrategy{public void doSomething(){System.out.println("this is a concreteStrategy");}}
public class ConcreteStrategy2 implements IStrategy{@Overridepublic void doSomething() {System.out.println("This is concreteStrategy2");}}
定义全局上下文
public class Context {private IStrategy strategy;public Context(IStrategy strategy){this.strategy = strategy;}public void doSomething(){this.strategy.doSomething();}}
定义一个枚举类
public enum StrategyMan {Strategy1("com.strategy.ConcreteStrategy1"),Strategy2("com.strategy.ConcreteStrategy2");String value = "";private StrategyMan(String value){this.value = value;}public String getValue(){return this.value;}}
定义一个策略工厂
public class StrategyFactory {
public static IStrategy getStrategy(StrategyMan strategyman){
IStrategy strategy = null;
try {
strategy = (IStrategy) Class.forName(strategyman.getValue()).newInstance();
} catch (Exception) {
e.printStackTrace();
}
return strategy;
}
}
public class StrategyFacade {
public void doSomething(String str){
StrategyMan sMan = StrategyMan.valueOf(str);
IStrategy strategy = StrategyFactory.getStrategy(sMan);
Context context = new Context(strategy);
context.doSomething();
}
}
public class Client {
public static void main(String[] args) {
StrategyFacade sFacade = new StrategyFacade();
sFacade.doSomething("Strategy1");
}
}
总结:
- 首先定义一个策略接口;
- 然后让一些子类实现这个接口,每一种策略就是一个子类;
- 然后再定义一个枚举类来创建所需要的子类,再通过工厂的方式来生产策略类。
