2026/4/17 2:14:26
网站建设
项目流程
网站流量分析软件,灯罩技术支持东莞网站建设,wordpress使用技巧,视频拍摄技巧文章目录 1. 引言#xff1a;从一个常见问题说起2. 什么是简单工厂模式核心思想 3. 简单工厂模式的角色组成4. 示例#xff1a;不用工厂的写法#xff08;问题代码#xff09;5. 引入简单工厂模式5.1 抽象产品5.2 具体产品实现5.3 具体工厂#xff08;核心#xff09;5.4…文章目录1. 引言从一个常见问题说起2. 什么是简单工厂模式核心思想3. 简单工厂模式的角色组成4. 示例不用工厂的写法问题代码5. 引入简单工厂模式5.1 抽象产品5.2 具体产品实现5.3 具体工厂核心5.4 客户端使用6. 简单工厂模式的优点7. 简单工厂模式的缺点8. 适用场景适合使用不适合使用参考1. 引言从一个常见问题说起在面向对象编程中我们经常会遇到这样的代码if(circle.equals(type)){shapenewCircle();}elseif(rectangle.equals(type)){shapenewRectangle();}elseif(triangle.equals(type)){shapenewTriangle();}这类代码有几个明显问题创建逻辑分散在业务代码中新增产品时需要修改大量 if-else违反了开闭原则对扩展开放对修改关闭对具体类产生了强耦合问题的根源在于对象的创建与使用耦合在了一起。而简单工厂模式正是用来解决这一问题的经典方案。2. 什么是简单工厂模式简单工厂模式Simple Factory Pattern严格来说并不是 GoF 23 种设计模式之一而是一种常用的创建型设计思想。核心思想由一个专门的工厂类负责根据条件创建不同的产品对象客户端只关心使用不关心创建。3. 简单工厂模式的角色组成简单工厂模式通常包含三个角色抽象产品Product定义产品的公共接口具体产品ConcreteProduct实现抽象产品接口具体工厂Factory负责创建具体产品实例结构示意Client → Factory → ConcreteProduct ↑ Product4. 示例不用工厂的写法问题代码以“计算器”为例假设我们要实现加减乘除publicclassCalculator{publicstaticdoublecalculate(Stringop,doublea,doubleb){if(.equals(op)){returnab;}elseif(-.equals(op)){returna-b;}elseif(*.equals(op)){returna*b;}elseif(/.equals(op)){returna/b;}thrownewIllegalArgumentException(不支持的操作);}}问题总结所有逻辑集中在一个方法中新增运算符必须修改原代码可维护性差5. 引入简单工厂模式5.1 抽象产品publicinterfaceOperation{doubleapply(doublea,doubleb);}5.2 具体产品实现publicclassAddOperationimplementsOperation{publicdoubleapply(doublea,doubleb){returnab;}}publicclassSubOperationimplementsOperation{publicdoubleapply(doublea,doubleb){returna-b;}}publicclassMulOperationimplementsOperation{publicdoubleapply(doublea,doubleb){returna*b;}}publicclassDivOperationimplementsOperation{publicdoubleapply(doublea,doubleb){returna/b;}}5.3 具体工厂核心publicclassOperationFactory{publicstaticOperationcreateOperation(Stringop){switch(op){case:returnnewAddOperation();case-:returnnewSubOperation();case*:returnnewMulOperation();case/:returnnewDivOperation();default:thrownewIllegalArgumentException(不支持的操作类型);}}}5.4 客户端使用publicclassClient{publicstaticvoidmain(String[]args){OperationoperationOperationFactory.createOperation();doubleresultoperation.apply(3,5);System.out.println(result);}}此时客户端的变化不再依赖具体实现类只依赖抽象接口Operation创建逻辑集中管理6. 简单工厂模式的优点解耦对象创建与使用客户端代码更加简洁创建逻辑集中易于维护符合单一职责原则7. 简单工厂模式的缺点不符合开闭原则每增加一个产品就要修改工厂类工厂类职责过重容易膨胀扩展性有限正因如此才有了工厂方法模式和抽象工厂模式。8. 适用场景适合使用产品种类较少创建逻辑相对简单系统对扩展要求不高教学、Demo、小型系统不适合使用产品类型频繁变化大型复杂系统需要严格遵循开闭原则的架构参考工厂模式 | 菜鸟教程简单工厂模式