定义
工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的
优缺点
优点
- 符合开闭原则,新增加"产品"对象 只需要 新增工厂实现即可;无需修改原来的代码
- 解耦,抽象工厂 只依赖 高层的抽象"产品",
- 调用者 无需 了解产品细节,只要了解每个工厂 可以生产哪个 产品
缺点
- 增加了系统的复杂度
- 每个工厂只能生产一种 产品
适用场景
调用者 不关系 "产品"的创建细节,只关心想要哪种类型的“产品”
主要组成结构
抽象工厂:
具体工厂:
抽象产品:
具体产品:
类图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zNhkcwch-1643449317301)(https://gitee.com/beauty-coding/resource/raw/master/img/patterndesign/%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F.jpeg)]
代码实现
public class FactoryMethodPattern {
public static void main(String[] args) {
Factory factoryA = new ConcreteFactoryA();
Factory factoryB = new ConcreteFactoryB();
final Product productA = factoryA.getProduct();
final Product productB = factoryB.getProduct();
productA.doMethod();
productB.doMethod();
}
}
interface Product{
void doMethod();
}
class ConcreteProductA implements Product{
@Override
public void doMethod() {
System.out.println("产品A");
}
}
class ConcreteProductB implements Product{
@Override
public void doMethod() {
System.out.println("产品B");
}
}
interface Factory{
Product getProduct();
}
class ConcreteFactoryA implements Factory{
@Override
public Product getProduct() {
return new ConcreteProductA();
}
}
class ConcreteFactoryB implements Factory{
@Override
public Product getProduct() {
return new ConcreteProductB();
}
}