设计模式(二)-创建者模式(2-0)-简单工厂模式

一、简单工厂模式定义

客户端不需要关注创建实例的过程。于是需要通过工厂模式,要把创建对象过程和使用对象进行分离。所以客户端只要使用对象即可,而创建对象过程由一种类来负责,该类称为工厂类。

由于创建实例的方式是在静态方法里实现的,所以简单工厂模式也称为静态工厂方法模式。

特点: 创建一个工厂类,根据不同的参数来创建不同类的对象,并把该对象返回给共同的一个基类。

优点: 创建对象时,客户端不需要处理整个创建逻辑的过程。只要输入参数就可生成对应的对象。

缺点: 1)如果工厂类存在代码逻辑的错误,一经修改后,整个系统都要受到影响。2)增加了新的实现类,工厂类里静态方法也多加了一个新的创建对象,也就增加了系统的复杂度。

合理应用条件

  • 客户端不需要关心创建对象。
  • 创建的对象比较少,创建的类是比较少。

角色
抽象基类: 用以定义特征和行为的抽象接口。
实现类: 继承抽象基类,用以实现特征和行为的具体类。
工厂类: 根据不同的参数,创建不同的实现类,并赋值给基类。

请添加图片描述

二、例子

需求:
提供一辆汽车和一辆自行车。

// Vehicle 作为抽象基类public abstract class Vehicle{public abstract void make();}
// Car 继承 Vehicle 的行为特征public class Car : Vehicle{public override void make() {Console.WriteLine("Produce a Car");}}
// Bicycle 继承 Vehicle 的行为特征public class Bicycle : Vehicle{public override void make(){Console.WriteLine("Produce a Bicycle");}}//工厂类,负责根据不同的参数来创建实现类对象。public static class Factory{public static Vehicle CreateVehicle(string arg) {Vehicle vehicle = null;switch(arg){case "Car":vehicle = new Car(); break;case "Bicycle":vehicle = new Bicycle(); break;default:throw new ArgumentException("arg Invalid.new obj failed.");}return vehicle;}}class Program{static void Main(string[] args){//使用实现类对象,Factory 对客户端隐藏了创建细节。Vehicle car = Factory.CreateVehicle("Car");car.make();Vehicle bicycle = Factory.CreateVehicle("Bicycle");bicycle.make();Console.ReadLine();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/149842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ICASSP2023年SPGC多语言AD检测的论文总结

文章目录 引言正文AbstractRelated ArticleNo.1: CONSEN: COMPLEMENTARY AND SIMULTANEOUS ENSEMBLE FOR ALZHEIMERSDISEASE DETECTION AND MMSE SCORE PREDICTION特征相关模型结构数据处理结果分析 No.2: CROSS-LINGUAL TRANSFER LEARNING FOR ALZHEIMERS DETECTION FROM SPON…

learning项目总结

Dialog组件:当背景图片是不规则情况,可以把内容写在传递函数中:modalRender{() > ()},而不是在>后面写 。所有的点击按钮都要加上cursor:pointer,会让用户知道在哪儿点击。对于需要兼容undefined / i…

「Tech初见」对epoll的理解

一、Motivation 通常,操作系统会为每个进程划分一个时间片的,在这个时间片内进程可以合法占有 cpu 进行一些计算任务。并当时间片结束后自动退回至就绪状态待命,等待下一次的调度 但是,有一种情况会使进程提前(时间片…

Python服务器的常用指令合集

Python常用指令 激活环境 # 服务器常用指令 source ~/.bashrc source activate torch conda deactivate conda activate torchconda activate machine-learning # 激活 jupyter notebook conda deactivate # 取消激活# shell activate torch&&d:&&cd D:\c…

vue中为什么data属性是一个函数而不是一个对象

面试官:为什么data属性是一个函数而不是一个对象? 一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象,也可以是一个函数 const app new Vue({el:"#app",// 对象格式data:{foo:"foo"},// 函数格…

EDA实验-----4*4矩阵键盘与数码管显示测试(Quartus ‖)

目录 一、实验目的 二、实验仪器设备 三、实验原理 四、实验要求 五、实验步骤 六、实验报告 七、实验过程 1.矩阵键盘按键原理 2.数码管原理 3.分频器代码 4.电路图连接 5.文件烧录 一、实验目的 了解数码管的工作原理;掌握4*4矩阵键盘和数码管显示的编…

STM32框架之按键扫描新思路

STM32框架之按键扫描新思路 引入代码展示思路分析 我们学习了定时器实现毫秒级/秒级任务框架,这期我们基于任务框架学习按键扫描新思路。 引入 在按键扫描的过程中,最重要的一步就是按键消抖,解决的方法最简单粗暴的就是先扫描一次按键状态&…

纵行科技亮相2023汽车物流行业年会,与菜鸟共推ZETag资产管理方案

近日,由中物联汽车物流分会主办的“汽车物流行业年会”在十堰召开。纵行科技受邀亮相,并与菜鸟共推ZETag资产管理方案,助力汽车物流数字化发展。 当前,我国物流业处于恢复性增长和结构性调整的关键期,国务院印发的《…

大模型的交互能力

摘要: 基础大模型显示出明显的潜力,可以改变AI系统的开发人员和用户体验:基础模型降低了原型设计和构建AI应用程序的难度阈值,因为它们在适应方面的样本效率,并提高了新用户交互的上限,因为它们的多模式和生…

中间件安全:Apache 目录穿透.(CVE-2021-41773)

中间件安全:Apache 目录穿透.(CVE-2021-41773) Apache 的 2.4.49、2.4.50 版本 对路径规范化所做的更改中存在一个路径穿越漏洞,攻击者可利用该漏洞读取到Web目录外的其他文件,如系统配置文件、网站源码等&#xff0c…

list用stream流转map报key重复

我们在利用java8 Lambda 表达式将集合中对象的属性转成Map时就会出现 Duplicate key xxxx , 说白了也就是key 重复了!案例如下: GetterSetterAllArgsConstructorpublic class Student{private String className;private String studentName;public st…

K-Means聚类

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 K-means聚类算法实现 技术细节 选取的数据集是sklearn.datasets里面的鸢尾花数据集,方便最后的算法评价。 根据手肘法(即根据SSE代价函数)得出最合适的k值。 此处思路是先根据E …

【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘

本文主要介绍更改Arduino IDE (含2.0以上版本)默认库文件位置的方法。 原创文章,转载请注明出处: 【实用技巧】更改ArduinoIDE默认库文件位置,解放C盘,将Arduino15中的库文件移动到其他磁盘-CSDN博客文章浏…

Kubernetes Dashboard部署ImagePullBackOff问题处理

通常,出现ImagePullBackOff问题是由于Kubernetes集群无法拉取所需的镜像导致的。解决这个问题的方法通常包括以下步骤: 1. 检查Pod的描述信息: kubectl describe pod/[pod名称] --namespacekubernetes-dashboard 查看Events部分是否有关于…

GOTS认证资讯-7.0版关于环境准则的要求

4.3. 环境准则 4.3.1. 环境管理政策 4.3.1.1. 除GOTS准则外,被认证实体应必须确保其加工或制造阶段(包括气体排放、废水排放和废弃物及污泥的处置)符合相应国家和当地环境法规的相关要求。 4.3.1.2. 被认证实体应拥有与其业务性质相适应的书面…

【Python百宝箱】图解未来:数据可视化引领智慧决策时代

图表和数据可视化在数据分析中的关键作用 引言: 在现代数据科学中,数据可视化扮演着至关重要的角色。通过图表和可视化工具,我们能够更直观、更有效地理解数据的分布、趋势和关联性。本文将深入讨论三个主要的数据可视化工具:mat…

Windows安装Java环境(OracleJDK)

在下载之前,我们先了解一下java的前世今生 1991年:Java 的前身 Oak 由 James Gosling 和他的团队在 Sun Microsystems 公司开发。1995年:Oak 更名为 Java,并在同年发布。Java 1.0 版本正式推出。1996年:Sun Microsyst…

Vue 2.0中引入的类型检查Flow

1. 认识 Flow Flow 是 facebook 出品的 JavaScript 静态类型检查工具。Vue.js 的源码利用了 Flow 做了静态类型检查,所以了解 Flow 有助于我们阅读源码。 2. 为什么用 Flow JavaScript 是动态类型语言,它的灵活性有目共睹,但是过于灵活的副…

XLua热更新框架原理和代码实战

安装插件 下载Xlua插件:https://github.com/Tencent/xLua 下载完成后,把Asset文件夹下的文件拖入自己的工程Asset中,看到Unity编辑器上多了个Xlua菜单,说明插件导入成功 Lua启动代码 新建一个空场景,场景中什么都不…

Threejs_06 多材质的实现

Threejs 同一个几何体如何实现多材质呢? 多材质的实现 1.使用索引绘制一个几何体 //创建几何体(三角形) const geometry new THREE.BufferGeometry();//使用索引绘制 (两个共用的) const vertices new Float32Array([-1.0, -1.0, 0.0, 1.0, -1.0, 0.0, 1.0, 1…