简单工厂模式学习总结
简单工厂模式
【作用】:将对象的创建与使用分离(单一职责原则)
【实现】:定义一个工厂类,根据不同参数返回不同类的实例,被创建的实例有共同父类
结构图
- Factory(工厂角色):工厂角色即工厂类,它是简单工厂模式的
核心
,负责实现创建所有产 品实例的内部逻辑 - Product (抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的 公有方法.
- ConcreteProduct(具体产品角色):它是简单工厂模式的创建目标
简化的简单工厂模式
为了简化简单工厂模式,我们可以将抽象产品类和工厂类合并,将静态工厂方法移至抽象产品类中
结构图
优缺点
优点
- 工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以 免除直接创建产品对象的职责
- 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可
- 通过引入配置文件,可以在不修改任何客户端代码的情况下更换新的具体产品类
缺点
- 由于工厂类集中了所有产品的创建逻辑,职责过重,违背了“单一职责原则”
- 增加系统中类的个数,增加了系统的复杂 度和理解难度。
- 添加新产品就不得不修改工厂逻辑,违背了”开闭原则”
适用场景
- 工厂类负责创建的对象比较少
- 客户端只知道传入工厂类的参数,对于如何创建对象并不关心
参考链接
简单工厂模式学习总结相关推荐
- 设计模式之简单工厂模式学习笔记
前言 简单工厂模式,又叫做静态工厂方法模式.属于创建型工厂模式,但是不属于23中设计模式.学习简单工厂模式,是为了更好地学习工厂方法模式. 定义 简单工厂模式,即静态工厂方法模式,是由一个工厂对象决定 ...
- 简单工厂模式学习笔记
简单工厂学习笔记 代码demo 简单工厂测试类 package com.zhh.designpattern.simplefactory;// 以生产冰箱为例,假设冰箱可能有海尔的,美的的,海信的,TC ...
- 设计模式学习--------3.简单工厂模式学习
场景: 服务端编写API方法供客户端调用,需要将接口与实现分离,客户端不需要知道具体实现,高度解耦,面向接口的编程. 定义: 提供一个创建对象实例的功能,而无须关心其具体实现,被创建实例的类型可以是接 ...
- 一起学习设计模式--02.简单工厂模式
工厂模式是最常用的一类创建型设计模式.我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式. 简单工厂模式是工厂方法模式的小弟,它不属于GoF 23种设计模式,但是在软件开发中应用也颇为频 ...
- 【Python学习随笔】依赖倒置原则 + 简单工厂模式
记录一下Python学习中的点滴,分享一段代码. [问题背景]在不同的系统平台需要执行一段有差异的指令,该如何写出更优雅的代码? [知识点]依赖倒置原则 + 简单工厂模式 [代码分享] #!/usr/ ...
- 项目学习——简单工厂模式优化
项目学习--简单工厂模式优化 一.前言 最近接触了一个项目,在这个项目中有一个EventHandler的概念,用于解决KAFKA不同类型的数据. 为了架构设计,开发成员在这里使用了工厂模式来处理这块请 ...
- 设计模式 学习笔记(1)简单工厂模式、策略模式
1.简单工厂模式 用一个单独的类来做创造实例的过程. public class OperationFactory{ public static Operation createOperate(stri ...
- 设计模式学习笔记二:简单工厂模式
含义: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创 ...
- 设计模式学习-简单工厂模式
模式概述: 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属 ...
- 设计模式学习-每日一记(1.简单工厂模式)
简单工厂模式 A.定义: 定义一个用于创建对象的接口. B.定义分析: "定义一个用于创建对象的接口". 这个模式的应用主要是定义一个接口,每个类都会有接口,对于面向对象语言就是定 ...
最新文章
- SAP MM初阶之事务代码MIGO界面里的HOLD
- 解决js跨域调用WebApi的问题
- 如何自学python基础-零基础小白该如何学习Python?
- java运行过程_Java执行过程
- fem求解二维时谐电磁场问题
- 笔记-项目配置管理-配置标识-配置识别与建立基线
- html实现拖拽排序,简单的jquery拖拽排序效果实现代码
- 架构选型,究竟啥时候选redis?
- linux命令 选项,Linux常用命令及选项
- 剑指 Offer II 083. 没有重复元素集合的全排列
- Java 中equals 与 == 的区别:
- 172篇文献:NUS颜水成等发布首篇《深度长尾学习》综述
- java百度地图离线LBS_百度地图之离线下载功能
- html微博图片上传,如何使上传新浪微博照片更清晰
- 三线压力传感器原理_压力传感器接线图及原理介绍
- Python123 英文字符的鲁棒输入
- python调用pyd_Python import / pyd / dll
- 圆满了!最后一次疯狂
- android 自定义音量调节,Android——自定义音量调节控件
- LTSPICE使用教程:参数变量和参数扫描
热门文章
- 深入浅出的etl作业调度工具taskctl
- 【Excel实战】按指定字符拆分字符串
- Mimics三维建模
- Mysql的持久层_持久层(数据层,Dao层) MyBatis框架
- 详尽的msf——meterpreter——渗透测试教程
- 一行Python代码玩转emoji表情,已经玩坏了都...
- 图形推理1000题pdf_2019和平区一模24题解析
- 数字图像处理边缘检测算子matlab,使用roberts算子对图像进行边缘检测,并二值化的matlab代码实现...
- Selenium +Python项目实践(注册流程)
- BabeLua--Lua调试器