首页 > 其他分享 >从零玩转设计模式之工厂方法设计模式-gonchangfangfamoshi

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

时间:2023-05-19 12:13:55浏览次数:28  
标签:gonchangfangfamoshi 创建 工厂 Fruit 玩转 createFruit 设计模式 方法

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

标签:gonchangfangfamoshi,创建,工厂,Fruit,玩转,createFruit,设计模式,方法
From: https://www.cnblogs.com/Yangbuyi/p/17414755.html

相关文章

  • 从零玩转设计模式之原型模式-yuanxingmoshi
    title:从零玩转设计模式之原型模式date:2022-12-1120:05:35.488updated:2022-12-2315:35:44.159url:https://www.yby6.com/archives/yuanxingmoshicategories:-设计模式tags:-设计模式-原型模式什么是原型模式设计模式?原型模式是一种软件设计模式,它允许您......
  • 从零玩转设计模式之外观模式-waiguanmos
    title:从零玩转设计模式之外观模式date:2022-12-1215:49:05.322updated:2022-12-2315:34:40.394url:https://www.yby6.com/archives/waiguanmoscategories:-设计模式tags:-设计模式什么是外观模式外观模式是一种软件设计模式,它提供了一种将多个子系统包装在一......
  • 从零玩转设计模式-从零玩转设计模式
    title:从零玩转设计模式date:2022-12-0400:14:53.517updated:2022-12-0400:41:09.896url:https://www.yby6.com/archives/从零玩转设计模式categories:tags:一、设计模式概述二、UML三、创建型模式5种四、结构型模式7种五、行为型模式11种六、如何正确使用......
  • 从零玩转前后端加解密之SM2-sm2
    title:从零玩转前后端加解密之SM2date:2022-08-2119:42:00.907updated:2023-03-3013:28:48.866url:https://www.yby6.com/archives/sm2categories:-加密算法-从零玩转系列tags:-加密算法-sm2前言SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密......
  • 从零玩转人脸识别验证-face
    title:从零玩转人脸识别验证date:2022-05-1521:05:52.974updated:2023-05-1600:00:11.594url:https://www.yby6.com/archives/facecategories:-Java分类-从零玩转系列-人脸识别tags:-java-人脸识别前言在线demo(前往享受人脸识别)本期教程人脸识别第......
  • 从零玩转Activiti7工作流-2021-09-12-16-22-07
    title:从零玩转Activiti7工作流date:2021-09-1216:22:08.51updated:2021-12-2617:43:12.171url:https://www.yby6.com/archives/2021-09-12-16-22-07categories:-工作流tags:Activiti讲师:波波​工作流(Workflow),就是通过计算机对业务流程自动化执行......
  • 从零玩转第三方登录之WeChat公众号扫码关注登陆 -wechatgzh
    title:从零玩转第三方登录之WeChat公众号扫码关注登陆date:2022-09-2722:46:53.362updated:2023-03-3013:28:41.359url:https://www.yby6.com/archives/wechatgzhcategories:-从零玩转系列tags:-第三方登录-从零玩转系列前言由于看见了面试鸭的登陆方式,我......
  • 从零玩转第三方登录之WeChat公众号登陆-cong-ling-wan-zhuan-di-san-fang-deng-lu-zhi
    title:从零玩转第三方登录之WeChat公众号登陆date:2022-09-0316:32:57.876updated:2022-09-0316:32:57.876url:https://www.yby6.com/archives/cong-ling-wan-zhuan-di-san-fang-deng-lu-zhi-wechat-gong-zhong-hao-deng-lucategories:tags:前言由于看见了面试鸭......
  • 从零玩转Yaip使用-cong-ling-wan-zhuan-yaip-shi-yong
    title:从零玩转Yaip使用date:2021-07-1615:47:17.624updated:2021-12-2617:43:12.255url:https://www.yby6.com/archives/cong-ling-wan-zhuan-yaip-shi-yongcategories:-apitags:Yaip****使用开发笔记1.什么是yapiYApi是高效、易用、功能强大的api管理平......
  • 从零玩转Websocket实时通讯服务之前后端分离版本-websocket
    title:从零玩转Websocket实时通讯服务之前后端分离版本date:2021-10-2500:47:12.945updated:2021-12-2617:43:10.496url:https://www.yby6.com/archives/websocketcategories:-OSS-mysql-api-单例模式-websokcettags:前言公司项目需要用到消息提示,那么......