工厂方法模式
模式定义
工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
优缺点:
优点:
- 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
- 灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
- 典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。
缺点:
- 类的个数容易过多,增加复杂度
- 增加了系统的抽象性和理解难度
- 抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决。
应用场景:
- 客户只知道创建产品的工厂名,而不知道具体的产品名。如 TCL 电视工厂、海信电视工厂等。
- 创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
- 客户不关心创建产品的细节,只关心产品的品牌
结构图
代码分析
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
作者:tiger_yam
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。