从零玩转设计模式之工厂方法设计模式

简介: 从零玩转设计模式之工厂方法设计模式

什么是工厂方法模式?

“工厂方法模式”是对简单工厂模式的进一步抽象化,它定义了一种创建对象的方法,允许子类决定实例化哪个类。这样,父类就可以用不同的子类来创建对象,而不需要知道实际创建哪个类。这样可以使得父类与实际创建的子类解耦,从而提高了代码的灵活性和可扩展性。

其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则

为了学习的目的我进行图片形式展现,各位同学请手动打出自己的设计模式代码

代码实现

定义接口实现类

image-1670477994010.png

创建对应的水果工厂

image-1670478021242.png

使用

image-1670478076542.png

代码解析:

Fruit fruit = new AppleFactory().createFruit();
        fruit.show();
        Fruit banner = new BannerFactory().createFruit();
        banner.show();

这段代码中包含了两个工厂类:AppleFactory 和BannerFactory,它们都实现了同一个接口或抽象类(即 Fruit)中定义的 createFruit() 方法。这个方法被用来创建一个水果(Fruit 类型)的实例。

每个工厂类都有自己的 createFruit() 方法,用来创建不同类型的水果。AppleFactory 类的 createFruit() 方法用来创建苹果(Apple)类型的水果,BannerFactory 类的 createFruit() 方法用来创建香蕉(Banner)类型的水果。

代码中的两行:

Fruit fruit = new AppleFactory().createFruit();
fruit.show();

调用了 AppleFactory 类的 createFruit() 方法来创建一个苹果(Apple)类型的水果实例,并调用这个实例的 show() 方法来展示这个水果。

后面的两行:

Fruit banner = new BannerFactory().createFruit();
banner.show();

也是一样的道理,只不过这次是调用了 BannerFactory 类的 createFruit() 方法来创建一个香蕉(Banner)类型的水果实例,并调用这个实例的 show() 方法来展示这个水果。

这段代码实现了工厂模式,用工厂类来封装了对象的创建过程,并提供了一个统一的接口来访问这些对象。使用工厂类和 createFruit() 方法可以提供一种更灵活、更模块化的方法来创建对象。它允许创建不同类型的 Fruit 对象,而不必指定要创建的对象的确切类。这可以使添加新类型的 Fruit 类和更改代码行为变得更容易,而无需修改现有代码。

优缺点

优点
 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
 灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
 典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。
缺点
 类的个数容易过多,增加复杂度
 增加了系统的抽象性和理解难度
 抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决。

UML图

image-1670479276667.png



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