策略模式很像简单工厂模式,后者是根据业务条件创建不同的对象,前者是根据业务条件去使用不同的策略对象。区别看下图
简单工厂模式
策略模式
主要区别在工厂类和CashContext这个两个类
工厂 类
public class ShapeFactory {
public static Shape createShape(String shape){
switch (shape){
case "circle":
return new Circle();
case "rectangle":
return new Ractangle();
}
return null;
}
}
CashContext
class CashContext{
Strategy strategy;
public CashContext(Strategy strategy ){
this.strategy = strategy;
}
//操作业务
public void method(){
strategy.method;
}
}
区别:
1工厂没有持有具体类的引用,策略构造器(CashContext)持有了具体类的引用,
2 工厂根据条件创建不同的对象,此时的策略构造器(CashContext)要在activity中做条件判断(很明显这里可以和简单工厂模式结合)
可知简单工厂一旦新增了具体类,工厂类就要做修改,但是策略模式不用修改CashContext类,他直接替换具体类。
但是当我们需要根据条件创建具体类的时候,策略模式会使得要在activity中做条件判断来确定创建什么具体类。这里又想到了使用工厂来优化。
结合简单工厂模式后的策略构造器(CashContext)
class CashContext{
Strategy strategy;
public CashContext(string condition){
switch (condition){
case "circle":
strategy = new CicleStrategy();
break;
case "rectangle":
strategy = new RectangleStrategy();
break;
}
}
//操作业务
public void method(){
strategy.method;
}
}