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

简单工厂、工厂方法和抽象工厂

将这三种模式放到一起,是为了更好的看出模式的演变及其应用的范围。

设计模式一开张就来讲对象的创建管理。这也是在程序开发中最实用的模式。

简单工厂是最简单的一种模式,对使用者来说,它就是通过一个工厂类(也有人叫他万能类或者管理类)来获得一个产品接口的具体实现,而无须估计具体的产品实现细节;因此提供者只要保证工厂类和产品接口这两者不变,就能很好的维护客户或者调用代码的。简单工厂使用的范围是工厂类要相对简单,且变化比较缓慢;其缺点是工厂类无法扩展,不满足OCP原则。这应该是他没有被GOF认为是一种模式的原因吧。

工厂方法是在简单工厂的基础上变化而来,客户不再直接依赖一个一成不变工厂类,而是一个工厂接口,从而是用户及提供者都可以很方便的扩展工厂接口,而且整个代码结构保持不变,解决了简单工厂不满足OCP的问题。

抽象工厂是在工厂方法的基础上进一步演化而来。从上面的情况来看,简单工厂和工厂方法都是针对单一产品;如果工厂需要生产多个相互关联的产品(可以理解为同一工厂生产的A系列的产品不能同B系列产品混用),这时候就需要用抽象工厂模式了。抽象工厂模式的使用条件是保持产品结构的相对稳定,即它不能很好应对的增加新产品的变化(原生产产品A和产品B,现在要增加产品B)。

 

转载于:https://www.cnblogs.com/rockythd/p/3446631.html

相关文章:

  • SQLite 多线程模型实测分析
  • 小白都能玩的算法day3-计算机的变革
  • Easyui入门视频教程 第04集---Easyui布局
  • git的安装
  • Visual Studio ALM 词汇表
  • mysql判断两个逗号分隔字符串是否有交集
  • 2018 KDD CUP支付宝安全团队Deep X斩获两项大奖
  • JConsole connection failed
  • tarjan进阶
  • ubuntu13启动屏幕亮度0解决方法
  • 数据结构与抽象 Java语言描述 第4版 pdf (内含标签)
  • 文件尾存在EOF吗?
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • JMeter中的读取json数据---JSON Extractor插件
  • 添加GDataXMLNODE.h和.m的方法
  • Angular Elements 及其运作原理
  • Effective Java 笔记(一)
  • egg(89)--egg之redis的发布和订阅
  • Flex布局到底解决了什么问题
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript 基础知识 - 入门篇(一)
  • javascript 总结(常用工具类的封装)
  • JAVA并发编程--1.基础概念
  • Linux gpio口使用方法
  • MySQL几个简单SQL的优化
  • Swoft 源码剖析 - 代码自动更新机制
  • tensorflow学习笔记3——MNIST应用篇
  • Vue2.0 实现互斥
  • web标准化(下)
  • 代理模式
  • 如何设计一个微型分布式架构?
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用 Swift 编写面向协议的视图
  • 自动记录MySQL慢查询快照脚本
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • const的用法,特别是用在函数前面与后面的区别
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (003)SlickEdit Unity的补全
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C语言)逆序输出字符串
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (七)理解angular中的module和injector,即依赖注入
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .NET BackgroundWorker
  • .Net Core和.Net Standard直观理解
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • @RequestMapping 的作用是什么?
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [AX]AX2012 R2 出差申请和支出报告
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数