下面从概念、设计思想、适用场景、代码结构几个方面详细讲解简单工厂模式和策略模式的区别并用Java 示例说明。一、简单工厂模式Simple Factory1 设计思想简单工厂模式的核心思想是将对象的创建过程集中到一个工厂类中由工厂决定创建哪一个具体对象。调用方不需要知道具体类只需要告诉工厂需要什么类型。简单理解调用者 - 工厂 - 具体对象工厂负责判断类型创建对象返回对象调用者只负责使用对象。2 示例场景假设有一个计算器系统支持加法减法乘法除法如果不用设计模式if(type.equals(add)){ AddOperation op new AddOperation(); }代码会充满if else。简单工厂就是把这些逻辑统一放到工厂里。3 Java 示例第一步定义运算接口public interface Operation { double calculate(double a, double b); }第二步实现具体运算类加法public class AddOperation implements Operation { Override public double calculate(double a, double b) { return a b; } }减法public class SubOperation implements Operation { Override public double calculate(double a, double b) { return a - b; } }第三步创建工厂类public class OperationFactory { public static Operation createOperation(String type) { if (add.equals(type)) { return new AddOperation(); } if (sub.equals(type)) { return new SubOperation(); } throw new RuntimeException(unsupported operation); } }第四步客户端调用public class Client { public static void main(String[] args) { Operation operation OperationFactory.createOperation(add); double result operation.calculate(10, 5); System.out.println(result); } }4 简单工厂特点优点客户端不需要知道具体类对象创建统一管理代码更清晰缺点最大的问题是违反开闭原则如果增加新的操作乘法 除法必须修改OperationFactory二、策略模式Strategy Pattern1 设计思想策略模式的核心思想定义一系列算法将每一个算法封装起来并且可以互相替换。策略模式的结构Context上下文 Strategy策略接口 ConcreteStrategy具体策略简单理解行为可以随时切换例如支付方式排序算法压缩算法促销算法2 示例场景还是用计算器例子但用策略模式。不同计算方式就是不同策略。3 Java 示例第一步定义策略接口public interface Strategy { double calculate(double a, double b); }第二步实现具体策略加法策略public class AddStrategy implements Strategy { Override public double calculate(double a, double b) { return a b; } }减法策略public class SubStrategy implements Strategy { Override public double calculate(double a, double b) { return a - b; } }第三步定义上下文类public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy strategy; } public double execute(double a, double b) { return strategy.calculate(a, b); } }第四步客户端调用public class Client { public static void main(String[] args) { Strategy strategy new AddStrategy(); Context context new Context(strategy); double result context.execute(10, 5); System.out.println(result); } }如果要切换策略Strategy strategy new SubStrategy();不需要修改其他代码。三、两种模式核心区别对比点简单工厂模式策略模式核心目的创建对象切换算法关注点对象创建行为变化是否有工厂有没有是否支持动态切换不支持支持是否符合开闭原则一般不符合符合使用方式工厂决定对象客户端选择策略四、代码结构对比简单工厂结构Operation ↑ AddOperation SubOperation OperationFactory客户端OperationFactory.create(add)策略模式结构Strategy ↑ AddStrategy SubStrategy Context客户端new Context(new AddStrategy())五、什么时候用简单工厂适用于对象创建逻辑复杂对象种类不多不需要经常新增类型例如日志对象创建数据库连接创建简单工具类六、什么时候用策略模式适用于多种算法可互换算法经常增加希望运行时切换行为例如支付方式排序算法折扣计算路径规划七、通俗总结用一句话理解简单工厂解决“创建哪个对象”的问题例子你去餐厅点餐 服务员帮你决定厨师策略模式解决“使用哪种算法”的问题例子你自己选择 清蒸 红烧 油炸再简单一点模式本质简单工厂帮你创建对象策略模式让你切换算法如果你愿意我可以再给你讲一个真实业务中常见的例子支付系统能一下子彻底理解策略模式为什么比简单工厂更高级。
简单工厂模式和策略模式的区别
下面从概念、设计思想、适用场景、代码结构几个方面详细讲解简单工厂模式和策略模式的区别并用Java 示例说明。一、简单工厂模式Simple Factory1 设计思想简单工厂模式的核心思想是将对象的创建过程集中到一个工厂类中由工厂决定创建哪一个具体对象。调用方不需要知道具体类只需要告诉工厂需要什么类型。简单理解调用者 - 工厂 - 具体对象工厂负责判断类型创建对象返回对象调用者只负责使用对象。2 示例场景假设有一个计算器系统支持加法减法乘法除法如果不用设计模式if(type.equals(add)){ AddOperation op new AddOperation(); }代码会充满if else。简单工厂就是把这些逻辑统一放到工厂里。3 Java 示例第一步定义运算接口public interface Operation { double calculate(double a, double b); }第二步实现具体运算类加法public class AddOperation implements Operation { Override public double calculate(double a, double b) { return a b; } }减法public class SubOperation implements Operation { Override public double calculate(double a, double b) { return a - b; } }第三步创建工厂类public class OperationFactory { public static Operation createOperation(String type) { if (add.equals(type)) { return new AddOperation(); } if (sub.equals(type)) { return new SubOperation(); } throw new RuntimeException(unsupported operation); } }第四步客户端调用public class Client { public static void main(String[] args) { Operation operation OperationFactory.createOperation(add); double result operation.calculate(10, 5); System.out.println(result); } }4 简单工厂特点优点客户端不需要知道具体类对象创建统一管理代码更清晰缺点最大的问题是违反开闭原则如果增加新的操作乘法 除法必须修改OperationFactory二、策略模式Strategy Pattern1 设计思想策略模式的核心思想定义一系列算法将每一个算法封装起来并且可以互相替换。策略模式的结构Context上下文 Strategy策略接口 ConcreteStrategy具体策略简单理解行为可以随时切换例如支付方式排序算法压缩算法促销算法2 示例场景还是用计算器例子但用策略模式。不同计算方式就是不同策略。3 Java 示例第一步定义策略接口public interface Strategy { double calculate(double a, double b); }第二步实现具体策略加法策略public class AddStrategy implements Strategy { Override public double calculate(double a, double b) { return a b; } }减法策略public class SubStrategy implements Strategy { Override public double calculate(double a, double b) { return a - b; } }第三步定义上下文类public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy strategy; } public double execute(double a, double b) { return strategy.calculate(a, b); } }第四步客户端调用public class Client { public static void main(String[] args) { Strategy strategy new AddStrategy(); Context context new Context(strategy); double result context.execute(10, 5); System.out.println(result); } }如果要切换策略Strategy strategy new SubStrategy();不需要修改其他代码。三、两种模式核心区别对比点简单工厂模式策略模式核心目的创建对象切换算法关注点对象创建行为变化是否有工厂有没有是否支持动态切换不支持支持是否符合开闭原则一般不符合符合使用方式工厂决定对象客户端选择策略四、代码结构对比简单工厂结构Operation ↑ AddOperation SubOperation OperationFactory客户端OperationFactory.create(add)策略模式结构Strategy ↑ AddStrategy SubStrategy Context客户端new Context(new AddStrategy())五、什么时候用简单工厂适用于对象创建逻辑复杂对象种类不多不需要经常新增类型例如日志对象创建数据库连接创建简单工具类六、什么时候用策略模式适用于多种算法可互换算法经常增加希望运行时切换行为例如支付方式排序算法折扣计算路径规划七、通俗总结用一句话理解简单工厂解决“创建哪个对象”的问题例子你去餐厅点餐 服务员帮你决定厨师策略模式解决“使用哪种算法”的问题例子你自己选择 清蒸 红烧 油炸再简单一点模式本质简单工厂帮你创建对象策略模式让你切换算法如果你愿意我可以再给你讲一个真实业务中常见的例子支付系统能一下子彻底理解策略模式为什么比简单工厂更高级。