设计模式——工厂模式

文章目录

1、简单工厂模式

略

2、工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类。

在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。


工厂方法模式包含如下角色:

  • Product:抽象产品
  • ConcreteProduct:具体产品
  • Factory:抽象工厂
  • ConcreteFactory:具体工厂

模式分析:

  • 工厂方法模式是 的进一步抽象和推广。由于使用了面向对象的多态性,
    工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,
    核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核
    心类仅仅负责给出具体工厂必须实现的接口,而不负责哪一个产品类被实例化这种细
    节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。
  • 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体产品对象以及一个具体
    工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好地符合了
    "开闭原则"。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
    工厂方法模式退化后可以演变成简单工厂模式。

3、抽象工厂模式

动机:当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式。

为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

模式结构如下所示:

抽象工厂模式包含如下角色:

  • AbstractFactory:抽象工厂,声明创建抽象产品对象的操作接口
  • ConcreteFactory:具体工厂,实现创建具体对象的操作
  • AbstractProduct:抽象产品,为一类产品对象声明一个接口
  • ConcreteProduct:具体产品,定义一个被具体工厂创建的产品对象

4. 工厂方法模式和抽象工厂模式的区别

  • 工厂模式是一种极端情况下的抽象工厂模式,而抽象工厂模式可以看成是工厂模式的一种推广
  • 工厂模式的特点
    • 一个抽象产品类,可以派生出多个具体产品类
    • 一个抽象工厂类,可以派生出多个具体工厂类
    • 每个具体工厂类只能创建一个具体的产品类实例
  • 抽象工厂模式的特点
    • 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类
    • 一个抽象工厂类,可以派生出多个具体工厂类
    • 每个具体工厂类可以创建多个具体产品类的实例

总结

未完待续

相关推荐
不是万能的豆学长2 小时前
filetidy 文件整理助手:一键归类 + 规范重命名(Python 零依赖单文件工具)
大数据·开发语言·python·技术美术
时间静止不是简史2 小时前
生产事故排查:Redis 宕机导致补偿队列消费线程死亡,通话录音未上送业务平台
java·redis
2301_32241428045 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
懂点Tech6 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
金銀銅鐵7 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
catchadmin7 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
福建佰胜张工8 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
念何架构之路8 小时前
go-grpc设计思想
开发语言·后端·golang
catoop8 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
system_error_x8 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端