DP学习——简单工厂模式

学而时习之,温故而知新。

敌人出招(使用场景)

不同的业务场景下要创建不同的对象,但是这些对象又有共同的特点。如何复用代码呢?你会想到,这些对象可以抽象出一个基类/抽象类就行了,那么随着业务的增加,子类不断地增多,继承这抽象类的子类越来越多——零零散散的放在各个角落——而且应用层只是使用其基类指针,不关注其类的内部实现,有没有更好的组织、管理方式呢?

你出招

这个时候就要简单工厂模式这招了,它属于创建型设计模式。

具体招式

有3个角色组成——工厂类、抽象产品类和具体产品类。
工厂类是对上述说的多个具体产品子类的管理,把零零散散各个角落里的各个子类统一管理起来。一般在工厂类的构造函数里if else根据入参new出对应子类对象,返回其父类指针(抽象类指针)。

抽象产品类,是业务不变化的点。
具体产品类,是业务不断变化的点——就是可以不断扩展出新类。

这样的话在业务层面,根据不同业务的需求让工厂类创建不同的对象,实现业务需求。这样工厂类内部产品类的变化对业务层不可见,可以分开更新——在应用层面又抵抗了变化。

抽象产品类带来的另一个设计模式

因为抽象产品类是所有具体产品子类的抽象,这样就可以把所有具体产品类的处理流程节点抽象到抽象类的方法里,那么具体产品类负责实现——有没有发现,这是模板模式。

缺点

可以看到,每扩展一个具体产品类,都要修改工厂类的内部实现——这一点没有遵循开闭原则,这点不太好。

相关推荐

  1. DP学习——简单工厂模式

    2024-07-10 22:56:03       8 阅读
  2. DP学习——策略模式

    2024-07-10 22:56:03       9 阅读
  3. DP学习——组合模式

    2024-07-10 22:56:03       6 阅读
  4. DP学习——状态模式

    2024-07-10 22:56:03       2 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 22:56:03       3 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 22:56:03       3 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 22:56:03       2 阅读
  4. Python语言-面向对象

    2024-07-10 22:56:03       2 阅读

热门阅读

  1. 从 Spark 离线数仓到 Flink 实时数仓:实战指南

    2024-07-10 22:56:03       9 阅读
  2. 浅析DDoS高防数据中心网络

    2024-07-10 22:56:03       10 阅读
  3. 奇幻的Python

    2024-07-10 22:56:03       8 阅读
  4. 记录一些简单的linux运维命令

    2024-07-10 22:56:03       8 阅读
  5. python--del

    2024-07-10 22:56:03       7 阅读
  6. BiLSTM模型实现

    2024-07-10 22:56:03       9 阅读
  7. Vue2.0和Vue3.0的区别?

    2024-07-10 22:56:03       11 阅读
  8. 网络安全应急处理流程

    2024-07-10 22:56:03       10 阅读
  9. 算法·高精度

    2024-07-10 22:56:03       7 阅读
  10. 闲聊C++与面向对象思想

    2024-07-10 22:56:03       8 阅读
  11. 路由器中 RIB 与 FIB 的区别

    2024-07-10 22:56:03       13 阅读