侧边栏壁纸
博主头像
杨不易呀

你的压力来源于无法自律,只是假装努力,现状跟不上内心欲望,所以你焦虑又恐慌。——杨不易呀

  • 累计撰写 45 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

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

杨不易呀
2022-12-08 / 0 评论 / 0 点赞 / 66 阅读 / 840 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-12-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

什么是工厂方法模式?

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

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

代码实现

定义接口实现类

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

0

评论区