一文搞懂设计模式--工厂方法

简介: 一文搞懂设计模式--工厂方法

工厂方法(Factory Method)


介绍


工厂方法模式,又称工厂模式、多态工厂模式,通过定义工厂父类负责定义创建对象的公共接口,而子类负责生成具体的对象。

工厂方法使一个类的实例化延迟到工厂类的子类(具体工厂)中完成,由子类来决定应该实例化(创建)哪一个类。

类图


实例


抽象汽车接口


public interface AbstractCar {
    void run();
}

汽车实现类


public class BenchiCar implements AbstractCar{
    @Override
    public void run() {
        System.out.println("我是奔驰,我可以跑跳着跑!");
    }
}
public class WulingCar implements AbstractCar{
    @Override
    public void run() {
        System.out.println("我是五菱,我能飞!");
    }
}

工厂接口


public interface AbstractCarFactory {
    AbstractCar newCar();
}

工厂实现类


public class BenciCarFactory implements AbstractCarFactory{
    @Override
    public AbstractCar newCar() {
        return new BenchiCar();
    }
}
public class WulinCarFactory implements AbstractCarFactory{
    @Override
    public AbstractCar newCar() {
        return new WulingCar();
    }
}

会员端


public class Client {
    public static void main(String[] args) {
        AbstractCarFactory wulinCarFactory = new WulinCarFactory();
        AbstractCarFactory benciCarFactory = new BenciCarFactory();
        AbstractCar wuling = wulinCarFactory.newCar();
        wuling.run();
        AbstractCar benci = benciCarFactory.newCar();
        benci.run();
    }
}
我是五菱,我能飞!我是奔驰,我可以跑跳着跑!

总结


一图胜千言

image.png

1.使用的场景?

  • 当一个类不知道它所需要的对象的类时
  • 当一个类希望通过其子类来指定创建对象时

利用面向对象的多态性和里氏代换原则(继承父类,而不是去改变父类),在程序运行时,子类对象将覆盖父类对象(多态),从而使得系统更容易扩展。

2.本质是什么?

  • 延迟到子类来选择实现。
  • 工厂方法把创建对象的工作延迟到子类(具体工厂)来实现,它是先抽象出一个工厂,然后在实现类(子类)中选择实现

3.它解决了什么问题?

  • 解决了简单工厂模式的缺点,即工厂一旦需要生产新产品就需要修改工厂类的方法逻辑,这样就违背了开闭原则

4.它体现了设计模式中什么原则?

  • 依赖倒置,要依赖于抽象,而不是依赖于具体的实现(面向接口编程)。
  • 开闭原则,对修改关闭,对扩展开放。有新的产品了,不需要对工厂类(具体实现)修改。而是直接重写实现工厂接口,写新的逻辑即可。

5.存在的缺陷?

  • 添加新产品时,除了增加新产品类外,还要提供与之对应的具体工厂类,类的增多,在一定程度上增加了系统的复杂度;
  • 一个具体工厂只能创建一种具体产品

6.你认为与它相关的设计模式有哪些? 它们之间的区别有哪些?

  • 工厂方法模式和模板方法模式
  • 这两个模式外观类似,都是有一个抽象类,然后由子类来提供一些实现,**但是工厂方法模式的子类专注的是创建产品对象,
  • 模板方法模式的子类专注的是为固定的算法骨架提供某些步骤的实现。(提供实现步骤)
  • 这两个模式可以组合使用,在模板方法模式里面,使用工厂方法来创建模板方法需要的对象。

7.开源架构中哪些使用了这一模式?

后续更新.........



相关文章
|
6天前
|
设计模式 开发者
探讨常见设计模式 - 工厂方法模式的最佳实践和潜在的实施问题
【4月更文挑战第7天】工厂方法模式是创建型设计模式,提供了一种在不指定具体类情况下创建对象的方式。它定义创建对象的接口,允许子类决定实例化哪个类,从而解耦对象的创建和使用。最佳实践包括明确接口、封装创建逻辑、提供扩展点和避免过度使用。然而,过度工程、违反开闭原则、性能影响和依赖管理是可能的问题。通过权衡利弊并遵循最佳实践,工厂方法模式能在适当场景下提升代码灵活性和可扩展性。
|
6天前
|
设计模式 Java
常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)
有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法,观察者模式,策略模式)
41 2
|
7月前
|
设计模式
创建型设计模式02-工厂方法模式
创建型设计模式02-工厂方法模式
28 0
|
6天前
|
设计模式
设计模式-简单工厂和工厂方法
设计模式-简单工厂和工厂方法
|
6天前
|
设计模式 Java uml
【设计模式】什么是工厂方法模式?
【设计模式】什么是工厂方法模式?
8 1
|
6天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
6天前
|
设计模式 测试技术 Go
[设计模式 Go实现] 创建型~工厂方法模式
[设计模式 Go实现] 创建型~工厂方法模式
|
6天前
|
设计模式
设计模式(二)工厂方法模式(Factory Method)
设计模式(二)工厂方法模式(Factory Method)
15 0
|
6天前
|
设计模式 Java
小谈设计模式(9)—工厂方法模式
小谈设计模式(9)—工厂方法模式
|
6天前
|
设计模式 Java
23种设计模式,工厂方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】工厂方法模式是设计模式中的一种创建型模式,它主要解决的问题是对象创建的问题。它定义了一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。工厂方法让类的实例化推迟到子类中进行。
34 3