工厂方法设计模式

举报
杨不易呀 发表于 2023/12/22 16:45:10 2023/12/22
【摘要】 前言设计模式是一种在软件设计中广泛应用的概念,它们代表了解决特定问题或实现特定功能的经验性最佳实践和通用解决方案。设计模式是经过反复验证和测试的,可以帮助开发人员更有效地解决常见的设计问题,提高代码的可维护性、可扩展性和可重用性。设计模式可以分为三个主要类别:创建型、结构型和行为型。创建型设计模式关注对象的创建机制,结构型设计模式关注类和对象的组合方式,而行为型设计模式关注对象之间的通信和...

前言

设计模式是一种在软件设计中广泛应用的概念,它们代表了解决特定问题或实现特定功能的经验性最佳实践和通用解决方案。设计模式是经过反复验证和测试的,可以帮助开发人员更有效地解决常见的设计问题,提高代码的可维护性、可扩展性和可重用性。

设计模式可以分为三个主要类别:创建型、结构型和行为型。创建型设计模式关注对象的创建机制,结构型设计模式关注类和对象的组合方式,而行为型设计模式关注对象之间的通信和协作方式。在这些类别中,存在许多常见的简单设计模式,

banner

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

什么是工厂方法模式?

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

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

代码实现

定义接口实现类

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

最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

点赞

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。