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

DP讨论——简单工厂模式

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

敌人出招(使用场景)

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

你出招

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

具体招式

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

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

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

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

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

缺点

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【web]-信息收集-空白页面
  • 如何调整Oracle SGA的大小
  • MongoDB 全文检索
  • uniapp x — 跨平台应用开发的强大助力
  • 【eNSP模拟实验】单臂路由实现VLAN间通讯(复杂案例)
  • 【Oracle】实验三 Oracle数据库的创建和管理
  • 时序预测 | Matlab实现TCN-Transformer的时间序列预测
  • 自动驾驶算法———车道检测(一)
  • 算法的几种常见形式
  • 高阶面试-dubbo的学习
  • android 消除内部保存的数据
  • 【分布式系统】Filebeat+Kafka+ELK 的服务部署
  • centos 安装ffmpeg
  • 栈(Stack)与队列(Queue,Deque)
  • 亚信安全新一代终端安全TrustOne2024年重磅升级
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Apache Pulsar 2.1 重磅发布
  • DataBase in Android
  • Docker下部署自己的LNMP工作环境
  • Facebook AccountKit 接入的坑点
  • Intervention/image 图片处理扩展包的安装和使用
  • Java方法详解
  • node-glob通配符
  • Python打包系统简单入门
  • Vue全家桶实现一个Web App
  • 回顾2016
  • 技术胖1-4季视频复习— (看视频笔记)
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 异步
  • 应用生命周期终极 DevOps 工具包
  • python最赚钱的4个方向,你最心动的是哪个?
  • raise 与 raise ... from 的区别
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • (PADS学习)第二章:原理图绘制 第一部分
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (九)信息融合方式简介
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (转)Windows2003安全设置/维护
  • ***检测工具之RKHunter AIDE
  • **CI中自动类加载的用法总结
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .net 4.0发布后不能正常显示图片问题
  • .net 7和core版 SignalR
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 使用反射注册事件
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .考试倒计时43天!来提分啦!