当前位置: 首页 > news >正文

工厂方法+抽象工厂设计模式

基本的多态的使用

简单工厂

随便一个东西,简单create方法就是简单工厂

单例可以看做是简单的工厂

可扩展性不好。每次添加都要新的方法

1616750759160-3d078099-e41e-4c8e-8a85-ee15ea6456ce.png

工厂方法模式

1616750980924-3e149ad7-0d37-4449-a433-257ffbeac936.png

Factory 接口:工厂方法模式的核心接口之一。使用方会依赖 Factory 接口创建 Product 对象实例。

Factory 实现类( FactoryImpl 1 和 FactoryImpl 2):用于创建 Product 对象。不同的 Factory 实现会根据需求创建不同的 Product 实现类。

Product 接口:用于定义业务类的核心功能。Factory 接口创建出来的所有对象都需要实现 Product 接口。使用方依赖 Product 接口编写其他业务实现,所以使用方关心的是 Product 接口这个抽象,而不是其中的具体实现逻辑。

Product 实现类( ProductImpl 1 和 ProductImpl 2):实现了 Product 接口中定义的方法,完成了具体的业务逻辑。

1616751053952-b49843d2-43d1-4b19-bef9-72d4a2a9e30d.png

1616751110269-d6ab6b89-af1c-4886-8781-1428d0c00967.png

1616751132901-5d3c54a4-1dc4-4573-8dc1-b6e3730a4603.png

灵活的方式指定不同的 族系

基于多态

  • 抽象工厂:(电脑公司)定义抽象方法。方法返回值是抽象产品
    • 存在意义:调用者可以有统一的调用接口规范
  • 具体工厂:(苹果,惠普公司)继承抽象工厂,实现抽象方法,方法的返回值是抽象产品
    • 存在意义:按照抽象产品的规范,面向抽象工厂的接口,生产有自己的特色的产品
  • 抽象产品(电脑)
    • 存在意义:编写抽象工厂的时候使用
  • 具体产品:(MAC,XPS)
    • 每个具体工厂自己要实现的东西

最后使用工厂:抽象工厂接收,调用某一个具体工厂,每一个具体工厂都实现了抽象工厂的相同方法,只是返回的是抽象产品的不同实现类

就像是抽象工厂定义了一个电脑工厂应该生产电脑,固定了生产零件,组装电脑的抽象方法。具体工厂就像惠普公司,苹果公司,他们都会生产零件,组装电脑,但是品牌不一样。使用者根据自己的需要选择具体的工厂,使用抽象工厂已经定义的接口方法就可以获取自己想要的产品,不需要关注具体工厂的实现。

工厂与抽象工厂的对比

  • 工厂方法:(增加工厂容易,适合只有一个类别的时候,小部门,自己只负责鼠标生产。一个鼠标类别下要管理自己很多公司的时候要采用这个方式
    • 只会产生一类产品,下面是不同的工厂
    • 增加工厂的时候实现生产产品的方法以及自己的产品的子类即可
  • 抽象工厂:(增加类别困难,适合大工厂,自己管理很多类别,负责生产鼠标键盘主机,一个电商要管理展示很多电脑企业的时候可以采用这个方式
    • 会产生多类产品,下面是不同的工厂
    • 增加类别的时候每一个工厂都需要实现生产这个类别的方法以及类别对应具体的实现类
    • 增加工厂的时候,要把所有类别的产品都实现自己的实现类

应用

软件换皮肤。调用的方法是一样的,下面的实现方法名字都一样,但是内部的具体实现是不同的。所以开发者只需要面向写好的接口开发,而不是自己实现一个新的皮肤的时候就随便定义方法名字。

http://www.hskmm.com/?act=detail&tid=31217

相关文章:

  • 2025.10总结 - A
  • 访问者Visitor
  • 迭代器模式Iterator
  • WebStorm的安装与使用
  • WinCC Unified必备设置
  • Lexical Feature engineering
  • 面向对象进阶
  • OAuth2.0思维导图总结以及认证平台流程图
  • InCopy 2025安装教程(安装包)IC2025免费版下载安装教程
  • 材料可视化 | Violin Plot小提琴图Python实现 数据分布密度可视化科研图表
  • ApacheMapStruct常用总结
  • 《数学之美》读后感,简单之美——布尔代数和搜索引擎
  • JSON字符串转换为Map
  • fastjson
  • 2025/10/14 模拟赛总结 - sb
  • HEAD以及分离头指针
  • git思维导图总结
  • Python 并发编程:concurrent.futures
  • ZR3365
  • 记一次因对象构造顺序引发的踩内存问题
  • 恒流电路的震荡问题
  • 六维力传感器材质选择:影响性能与精度的关键因素 - 实践
  • C尖笔记
  • 浅谈自学习编程以来学到的代码规范
  • Jenkins Share Library教程 —— 高级实战与最佳实践教程
  • qoj.6555 Sets May be Good 做题记录
  • 结构化数据自动生成文本技术解析
  • CSharp: Aspose.CAD 25.10 Convert DWG and DXF to PDF
  • vtk学习——Pipeline
  • 长沙四大名校x东方project