一、工厂方法模式Factory Method1.1 定义工厂方法模式属于类的创建型模式又称多态工厂模式。核心思想是定义一个创建产品的工厂接口将实际创建工作推迟到子类。核心工厂类不再负责产品创建而是成为抽象工厂角色仅声明子类必须实现的接口。这样进一步抽象的好处系统可以在不修改具体工厂角色的情况下引入新产品天然契合开闭原则。1.2 角色与职责角色职责抽象工厂Creator模式核心定义工厂接口任何具体工厂都必须实现它具体工厂Concrete Creator抽象工厂的实现负责实例化对应的具体产品抽象产品Product所有产品的父类定义公共接口具体产品Concrete Product具体工厂创建出来的实例1.3 代码实现1抽象产品接口publicinterfaceFruit{/** 采集 */voidget();}2具体产品publicclassAppleimplementsFruit{Overridepublicvoidget(){System.out.println(采集苹果);}}publicclassBananaimplementsFruit{Overridepublicvoidget(){System.out.println(采集香蕉);}}3抽象工厂接口publicinterfaceFruitFactory{FruitgetFruit();}4具体工厂publicclassAppleFactoryimplementsFruitFactory{OverridepublicFruitgetFruit(){returnnewApple();}}publicclassBananaFactoryimplementsFruitFactory{OverridepublicFruitgetFruit(){returnnewBanana();}}5测试类publicclassTest{publicstaticvoidmain(String[]args){// 获得 Apple 对应的工厂FruitFactoryffnewAppleFactory();Fruitappleff.getFruit();apple.get();// Banana 同理FruitFactoryff1newBananaFactory();Fruitbananaff1.getFruit();banana.get();}}运行结果采集苹果 采集香蕉1.4 优缺点优点新增产品如Orange时只需新增Orange与OrangeFactory不改动任何已有工厂代码符合开闭原则具体工厂有共同父类可面向抽象编程耦合低、易扩展。缺点每新增一个产品就要配套一个工厂类类的数量成倍增长相比简单工厂结构略复杂小场景略显重。二、选型建议产品会持续扩展 / 强调开闭原则→ 用工厂方法模式正规军新增产品只加类不改旧代码。内部结构简单的内部模块 / 产品极少变化→ 也可考虑下文的简单工厂少写类、够用就好。记忆口诀工厂方法一个产品配一个厂——把创建哪个对象的判断分散到各自的子类工厂里而不是堆在一个类里。扩展简单工厂模式简单工厂不在 GOF 23 种设计模式之列它是工厂方法模式的简化 / 退化形态把一个产品配一个工厂收拢成一个工厂类包揽所有产品的创建又常被称为静态工厂方法模式。典型写法——用一个工厂类 静态方法对外提供产品publicclassFruitFactory{publicstaticFruitgetApple(){returnnewApple();}publicstaticFruitgetBanana(){returnnewBanana();}}// 调用方无需 new 具体产品FruitappleFruitFactory.getApple();FruitbananaFruitFactory.getBanana();与工厂方法的关系简单工厂本质上是把工厂方法里那一个个子类工厂压缩回了同一个类里的if/ 多个getXxx()方法。优势类少、上手快代价所有创建逻辑集中在一个类高内聚性差新增产品必须改工厂类违反开闭原则进阶可用反射如Class.forName(...).getDeclaredConstructor().newInstance()去掉if分支但仍需传入全限定类名且产品须有无参构造。一句话收尾工厂方法是 GOF 正规军易扩展但类多简单工厂是它的快捷写法好写但难扩展。产品常变选工厂方法图省事且产品稳定可选简单工厂。