设计模式-生成器设计模式

什么是生成器设计模式

  1. 众所周知我们设计代码的时候要将代码设计出模块化的,一个功能是一个模块,那么生成器设计模式,是将一个类再度进行了一个拆分,让一个类的内部进行了单一职责化,其实我们在平时开发的时候就会不经意的使用到该设计模式。
  2. 相当于在N个相似的生产线上我们通过定义了一个共有的interface,这N个生成线都是以相似的步骤来生成东西。
  3. 该模式有点类似与工厂设计模式,工厂设计模式是用来生成一系列相关的对象,生成器设计模式可以将一个复杂的对象拆分成很多步骤来完成。

使用场景

  1. 复杂对象的创建:当对象的创建过程涉及到多个步骤,并且这些步骤的顺序可能会变化时,生成器模式可以提供一种灵活的方式来创建对象。

  2. 不同的表示:当一个对象可以有多种不同的表示,而且你希望在运行时动态地选择表示时,生成器模式可以提供一种解决方案。

  3. 封装创建过程:当你希望封装对象的创建过程,以便在不暴露对象的内部表示的情况下创建对象时,生成器模式可以提供帮助。

UML图

在这里插入图片描述

代码

package generatortype Generator interface {setWindow()setDoor()setWall()setRoof()
}type GeneratorHouse struct {
}func NewGeneratorHouse() *GeneratorHouse {return &GeneratorHouse{}
}func (g *GeneratorHouse) setWindow() {println("set window for house")
}func (g *GeneratorHouse) setDoor() {println("set door for house")
}func (g *GeneratorHouse) setWall() {println("set wall for house")
}func (g *GeneratorHouse) setRoof() {println("set roof for house")
}
func (g *GeneratorHouse) GetResult() {println("set window for highrises")
}type GeneratorHighRises struct {
}func (g *GeneratorHighRises) setWindow() {println("set window for highrises")
}func (g *GeneratorHighRises) setDoor() {println("set door for highrises")
}func (g *GeneratorHighRises) setWall() {println("set wall for highrises")
}func (g *GeneratorHighRises) setRoof() {println("set roof for highrises")
}func (g *GeneratorHighRises) GetResult() {println("set window for highrises")
}type Director struct {
}func (d *Director) Excuter(task string) {if task == "house" {house := NewGeneratorHouse()house.setDoor()house.setRoof()house.setWall()house.setWindow()house.GetResult()}if task == "highrises" {highrises := &GeneratorHighRises{}highrises.setDoor()highrises.setRoof()highrises.setWall()highrises.setWindow()highrises.GetResult()}
}

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

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

相关文章

分布式id-Leaf算法

一、介绍 由美团开发,开源项目链接:https://github.com/Meituan-Dianping/Leaf Leaf同时支持号段模式和snowflake算法模式,可以切换使用。ID号码是趋势递增的8byte的64位数字,满足上述数据库存储的主键要求。 Leaf的snowflake模…

交叉导轨为何要保持日常清洁?

在工业自动化的发展中,交叉导轨因其具有精度高、高刚性、高耐磨性等特点,在数控技术的发展中得到了越来越多的使用,对于交叉导轨来说,保持日常清洁对其性能和寿命具有重要意义。 1、防止灰尘和杂质的侵入:交叉导轨在机…

嵌入式学习第十一天

1.数组和指针的关系: 1.一维数组和指针的关系: int a[5] {1, 2, 3, 4, 5}; int *p NULL; p &a[0]; p a; 数组的数组名a是指向数组第一个元素的一个指针常量 a &a[0] a 的类型可以理解为 int * 有两种情况除…

五步安装和配置CLion的ESP-IDF开发框架

记录CLion安装和配置ESP-IDF开发框架 真无语了,弄了半天多,近一天,这里弄那里弄。记录一下,万一后面还要踩坑呢! 弄一早上components的编写和使用(想用别人的components),下午弄开…

JavaScript学习-原型和原型链

原型和原型链 示例代码 //创建一个Person类 class Person {constructor(name) {this.name name;}drink() {console.log(喝水);} } //创建一个Teacher类,继承Person class Teacher extends Person {constructor(name, subject) {super(name);this.subject subjec…

动手学深度学习8 Softmax回归+损失函数+图片分类

Softmax回归损失函数图片分类 1. Softmax回归--分类问题2. 三个常用损失函数1. 均方损失 L2 Loss2. 绝对值损失函数 L1 Loss3. 两个结合 HUber’s Robust Loss 3. 图片分类数据集4. Softmax回归从零开始实现5. Softmax回归简洁实现6. QA 1. Softmax回归–分类问题 真实y只有一个…

基于java+jsp+ssh的毕业生就业信息管理系统

🍅文末获取源码联系🍅 👇🏻 精彩项目推荐订阅👇🏻 不然下次找不到哟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮…

ShardingSphere之ShardingJDBC客户端分库分表下

目录 ShardingJDBC实战 STANDARD标准分片策略 COMPLEX_INLINE复杂分片策略 CLASS_BASED自定义分片策略 HINT_INLINE强制分片策略 ShardingJDBC实战 上篇已经将需要用到的类、数据库表都准备好了,本篇主要介绍分片配置文件。 STANDARD标准分片策略 如果按照上篇文…

纳斯达克户外大屏背景配什么颜色效果最好-大舍传媒

纳斯达克户外大屏背景配什么颜色效果最好 引言 纳斯达克大屏是世界闻名的户外广告媒体之一,通过高清大屏呈现的广告内容吸引了众多目光。大舍传媒作为纳斯达克大屏的提供商和运营商之一,致力于创造最佳的视觉效果来吸引观众的注意力。在纳斯达克大屏投…

HCIA学习作业四

要求: 1、AR3还回为3.3.3.0/24 2、其他基于192.168.1.0/24进行合理划分 3、AR1和AR2均存在两个环回 4、整个网络运行RIP v2 但是不能直接宣告AR3的环回 5、全网可达,保障更新安全,尽量减少路由条目,避免环路 拓扑图&#xf…

EXP脚本编写

EXP脚本的编写与POC脚本编写一样,只需要修改_attack部分,替换成漏洞 利用的脚本即可。要利用Flask漏洞,需要用到Python的特性。关于如何在Jinja2模 板中执行Python代码,官方给出的方法是在模板环境中注册函数就可以进行调 用。 J…

java servlet运输公司管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web运输公司管理系统是一套完善的java web信息管理系统 serlvetdaobean mvc 模式开发 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主 要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5…

Multi-label classification复现

摘要 存在 theoretical results show that SA and HL are conflicting measures 1 介绍 an algorithm usually performs well on some measures while poorly on others.There are a few works studying the behavior of various measures.Although they provide valuable i…

【网站项目】基于SSM的246品牌手机销售信息系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

cmake工具的安装

1、简介 CMake 是一个开源的、跨平台的自动化建构系统。它用配置文件控制编译过程的方式和Unix的make相似,只是CMake并不依赖特定的编译器。CMake并不直接建构出最终的软件,而是产生标准的建构文件(如 Unix 的 Makefile 或 Windows Visual C …

使用Apache POI 创建和读取excel表

目录 1. Apache POI 中文使用手册 1.1 Apache POI 项目介绍 1.2 处理组件 1.2.1 Excel 文件处理组件 1.2.2 Word 文件处理组件 1.2.3 PPT 文件处理组件 1.2.4 文档属性组件 1.2.5 Visio 文件处理组件 1.2.6 Microsoft Publisher 98(-2007)文件处…

mac配置L2TP连接公司内网

1. 打开系统设置 2. 打开网络 3. 点击网络页面其他服务右下角三个点,添加VPN配置中的L2TP 4. 配置VPN,服务器填写公司的服务器ip,共享密钥没有可以随便填写 5. 打开终端编辑文件 sudo vim /etc/ppp/opt…

机电制造ERP软件有哪些品牌?哪家的机电制造ERP系统比较好

机电制造过程比较复杂,涵盖零配件、采购、图纸设计、工艺派工、生产计划、物料需求计划、委外加工等诸多环节。而供应链涉及供应商的选择、材料采购价格波动分析、材料交货、品质检验等过程,其中某个环节出现问题都可能会影响产品交期和经营效益。 近些…

概念抽取:构建认知基础的关键步骤

目录 前言1 概念抽取任务定义1.1 概念知识图谱的关系定义1.2 实体与概念的紧密关联1.3 多样的概念关系 2 概念在认知中的重要角色2.1 语言理解的基础2.2 上下位关系的深化理解 3 概念抽取方法3.1 基于模板的抽取3.2 基于百科的抽取3.3 基于机器学习的方法 4 应用4.1 自然语言理…

【论文笔记】GPT,GPT-2,GPT-3

参考:GPT,GPT-2,GPT-3【论文精读】 GPT Transformer的解码器,仅已知"过去",推导"未来" 论文地址:Improving Language Understanding by Generative Pre-Training 半监督学习&#xff1…