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

DP学习——简单工厂模式

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

敌人出招(使用场景)

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

你出招

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

具体招式

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

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

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

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

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

缺点

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Flink 窗口触发器(Trigger)(二)
  • php简单商城小程序系统源码
  • 【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示 proteus仿真+程序+设计报告+讲解视频
  • 【内网渗透】内网渗透学习之域渗透常规方法
  • 深入了解Rokid UXR2.0 SDK内置的Unity AR Glass开发组件
  • Python强大的数据转换功能库之awswrangler使用详解
  • 读人工智能全传08人工智能的今天
  • 容联七陌智能客服助力企业出海无忧,拓展全球
  • 护佑未来!引领儿童安全新时代的AI大模型
  • Qt 线程同步机制 互斥锁 信号量 条件变量 读写锁
  • git 的cherry-pick选择性提交
  • YOLO主干增强作用及代码
  • OpenCV 车牌检测
  • 第15章 奇异值分解:习题解答及其案例
  • 案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • JS 中的深拷贝与浅拷贝
  • C++类中的特殊成员函数
  • CentOS7 安装JDK
  • CSS魔法堂:Absolute Positioning就这个样
  •  D - 粉碎叛乱F - 其他起义
  • hadoop集群管理系统搭建规划说明
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JDK 6和JDK 7中的substring()方法
  • JS函数式编程 数组部分风格 ES6版
  • SegmentFault 2015 Top Rank
  • 程序员该如何有效的找工作?
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 通信类
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • ​字​节​一​面​
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $nextTick的使用场景介绍
  • (7)STL算法之交换赋值
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (补充)IDEA项目结构
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (算法)求1到1亿间的质数或素数
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .Net Core 生成管理员权限的应用程序
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET中 MVC 工厂模式浅析
  • .NET中GET与SET的用法
  • :=
  • @RequestBody与@ModelAttribute
  • @Validated和@Valid校验参数区别
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [20161101]rman备份与数据文件变化7.txt
  • [20190401]关于semtimedop函数调用.txt
  • [ANT] 项目中应用ANT