创建型 简单
工厂方法模式
Factory Method Pattern
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
概述
工厂方法模式是一种创建型设计模式,它提供了一种将实例化逻辑委托给子类的方式。这样可以在不修改现有代码的情况下引入新类型的产品。
适用场景
- •当一个类不知道它所必须创建的对象的类时
- •当一个类希望由它的子类来指定它所创建的对象时
- •当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化时
优点
- +避免了创建者和具体产品之间的紧密耦合
- +单一职责原则:将产品创建代码放在一个地方,使代码更容易维护
- +开闭原则:无需更改现有客户端代码,就可以在程序中引入新的产品类型
缺点
- −代码可能变得更加复杂,因为需要引入许多新的子类
- −可能需要修改客户端代码以支持新的具体创建者类
结构
classDiagram
class Product {
<<interface>>
+use()
}
class ConcreteProductA {
+use()
}
class ConcreteProductB {
+use()
}
class Creator {
<<abstract>>
+factoryMethod() Product
+operation()
}
class ConcreteCreatorA {
+factoryMethod() Product
}
class ConcreteCreatorB {
+factoryMethod() Product
}
Product <|.. ConcreteProductA
Product <|.. ConcreteProductB
Creator <|-- ConcreteCreatorA
Creator <|-- ConcreteCreatorB
Creator ..> Product : creates
ConcreteCreatorA ..> ConcreteProductA : creates
ConcreteCreatorB ..> ConcreteProductB : creates
style Product fill:#fff3e0,stroke:#f57c00,stroke-width:2px,stroke-dasharray: 5 5
style Creator fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
style ConcreteProductA fill:#e3f2fd,stroke:#1976d2
style ConcreteProductB fill:#e3f2fd,stroke:#1976d2
style ConcreteCreatorA fill:#f3e5f5,stroke:#7b1fa2
style ConcreteCreatorB fill:#f3e5f5,stroke:#7b1fa2
交互演示
点击不同工厂创建对应的产品
Creator(抽象类)
extends
creates
等待创建...
Product A 类型
Product B 类型
生活类比
工厂方法就像是现实世界中的各种工厂和生产线
餐厅点餐
你去餐厅点餐,只需要告诉服务员你想吃什么(接口),具体由哪个厨师(子类)来做、怎么做,你不需要关心。
物流公司
物流公司提供运输服务,根据客户需求选择卡车、轮船或飞机来运输,客户只需要知道货物会被运输即可。
代码实现
Example.java
实际应用
Java Collection Framework
Java 中的 Iterator 方法就是一个工厂方法,不同的集合类型返回不同的迭代器实现。
Example.java
Spring Framework
Spring 中的 FactoryBean 接口允许开发者自定义 Bean 的创建逻辑。
Example.java
练习
1