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