用最简单加减法来举例: Calculate 计算方法接口
public interface Calculate { int calculate(int a, int b); }分别创建Add以及Sub子类并实现其逻辑
public class Add implements Calculate { @Override public int calculate(int a, int b) { return a+b; } } public class Sub implements Calculate { @Override public int calculate(int a, int b) { return a-b; } }创建CalculateFactory工厂类
public class CalculateFactory { public static Calculate getCalculateInstance(String sign) { switch (sign) { case "+": return new Add(); case "-": return new Sub(); } return null; } }客户端中调用Calculate的calculate方法即可实现运算
Calculate calculate=CalculateFactory.getCalculateInstance("+"); calculate.calculate(1,2);同样的以加减法来举例,Calculate 计算方法接口及其子类就不重复了。他们两者的区别,个人感觉还是比较模糊的,如果把 Strategy的Context类同样命名为CalculateFactory,两者的区别可能就变得比较明显了
public class CalculateFactory { private Calculate calculate =null; public CalculateFactory(String sign){ switch (sign){ case "+": calculate = new Add(); case "-": calculate = new Sub(); } } public int getResult(int a, int b){ return calculate.calculate(a,b); } }客户端中调用CalculateFactory的getResult方法即可获取结果
new CalculateFactory("+").getResult(1,2);纵观两者,都是通过抽象封装了变化。简单工厂模式对不同类的创建的封装;而策略模式则是封装了不同的算法,直接返回所需要的结果。
注:以上纯属个人观点,欢迎指正