Fork me on GitHub

工厂方法模式

模式定义

工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

优缺点:

优点:

  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
  • 灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
  • 典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。

缺点:

  • 类的个数容易过多,增加复杂度
  • 增加了系统的抽象性和理解难度
  • 抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决。

应用场景:

  • 客户只知道创建产品的工厂名,而不知道具体的产品名。如 TCL 电视工厂、海信电视工厂等。
  • 创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
  • 客户不关心创建产品的细节,只关心产品的品牌

结构图

工厂方法模式.jpg

代码分析

public class Client{
    public static void main(String[] args) {
        Product product1 = new ConcreteFactory1().newProduct();
        product1.show();
        Product product2 = new ConcreteFactory2().newProduct();
        product2.show();
    }
}

interface AbstractFactory{
    public Product newProduct();
}

class ConcreteFactory1 implements AbstractFactory{
    @Override
    public Product newProduct() {
        return new ConcreteProduct1();
    }
}

class ConcreteFactory2 implements AbstractFactory{
    @Override
    public Product newProduct() {
        return new ConcreteProduct2();
    }
}

interface Product{
    public void show();
}

class ConcreteProduct1 implements Product{
    @Override
    public void show(){
        System.out.println("show method of ConcreteProduct1");
    }
}

class ConcreteProduct2 implements Product{
    @Override
    public void show(){
        System.out.println("show method of ConcreteProduct2");
    }
}

学习链接:

https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/factory_method.html

http://c.biancheng.net/view/1348.html

posted @ 2022-05-01 23:15  tiger_yam  阅读(27)  评论(0编辑  收藏  举报