我觉得策略模式与工厂方法模式极其相似!
如果单从图来看,看不出有何相似之处。但看看调用方法就知道了:
策略模式:
Context context = new Context();
AbstractStrategy strategy;
//采用哪种策略,由调用方决定
strategy = new ConcreteStrategyA();
context.setStrategy(strategy);
context.algorithm();
工厂方法模式:
IFactory factory;
//采用哪个工厂,由调用方法决定
factory = new ConcreteFactoryA();
IProduct product = factory.Create();
策略模式里有个上下文类,与工厂类非常像。在应用这两种模式的代码里,都是由调用方决定采用哪种策略,或者应用哪个工厂。策略代码和工厂代码本身,符合开闭原则,要改就改调用方。当然,这也可以看成是缺点,因为调用方要对策略和工厂非常了解。