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

title: 从零玩转设计模式之工厂方法设计模式
date: 2022-12-08 13:22:13.669
updated: 2022-12-11 23:03:22.379
url: https://www.yby6.com/archives/gonchangfangfamoshi
categories: 
- 设计模式
tags: 
- 设计模式

什么是工厂方法模式?

“工厂方法模式”是对简单工厂模式的进一步抽象化,它定义了一种创建对象的方法,允许子类决定实例化哪个类。这样,父类就可以用不同的子类来创建对象,而不需要知道实际创建哪个类。这样可以使得父类与实际创建的子类解耦,从而提高了代码的灵活性和可扩展性。
其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则

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

代码实现

定义接口实现类

image-1670477994010

创建对应的水果工厂

image-1670478021242

使用

image-1670478076542

代码解析:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值