设计模式的一些笔记(个人见解参杂各个模式的用途,未完待续0907)

文章目录

    • 一、创建者模式
      • 1)工厂模式
      • 2)原型模式
      • 3)建造者模式
      • 4)单例(单件)模式
    • 二、行为型模式
      • 1)策略模式
      • 2)观察者模式
      • 3)命令模式
      • 4)迭代器模式
      • 5)状态模式
      • 6)中介者模式
      • 7)备忘录模式
      • 8)职责链模式
      • 9)访问者模式
      • 10)解释器模式
    • 三、结构型模式
      • 1)组合Composite
      • 2)享元Flyweight
      • 3)代理模式Proxy
      • 4)适配器模式Adapter
      • 5)桥接模式Bridge
      • 6)外观模式

一、创建者模式

1)工厂模式

①简单工厂:
介绍:比如游戏里面任何一个obj都是一个实体Entity,这个Entity就是父类,子类就是怪物Monster、玩家Player、NPC、静态物品Doodad
构成:一个实体父类Entity、三个子类(每个子类有自己的构造函数)、一个怪物工厂类(根据传入参数静态方法生成怪物)
总结:每个构造函数实现了创建怪物的流程,实现不同对象的业务逻辑代码隔离
②工厂方法:
介绍:如果怪物是雨林、城市、沙漠,玩家的职业如果是盗贼、剑士、狂战士等等,那么写那么多细化的类
③抽象工厂:
介绍:由于新增的工厂类是工厂模式必须付出的代价,不太可取,可以简化成人物类、怪物类、静态物品类(尽可能的缩小类的范围,减少重复的可以抽象简化的类

2)原型模式

介绍:通过一个对象克隆出一摸一样的对象
构成
一个怪物父类Mosnter(创建Monster是虚函数,子类实现)、静态物品类玩家类NPC类调用各个类的构造函数,返回Monster对象(记得在子类自己写拷贝构造函数,不然两个对象都是同一个,但是之前的对象已经在函数结束的时候析构了

//深拷贝Stack(const Stack& st) {_array = (DataType*)malloc(sizeof(DataType) * st._capacity);if (_array == nullptr) {perror("malloc fail");return;}//只需要自己创建一块与st1相同大小的堆空间,其他的还是拷贝st1的数据memcpy(_array, st._array, _capacity = st._capacity);_size = st._size;_capacity = st._capacity;}

3)建造者模式

用途:通常用来构建一个比较复杂的对象,一般是按照一定顺序分步步骤进行(比如构建服务器之间的消息体,有些是自定义消息,有些是protobuf二进制消息)
注意:①虚函数不能放在构造或析构函数里面
构成:日报包括标题、内容、结尾
①日报的标题构造类、②日报的内容构造类、③日报的结尾类、④利用三个类构造日报的导出类(这里有时候需要导出XML有时候导出文本,那么就可以抽象出父类和子类,如下)

FileBuider* pfb = new TxtFileBuilder(); //父类指针指向子类对象,txt导数类和文本导出类继承自FileBuider
FileDirector* pDtr = new FileDirectore(pfb);//FileDirector是文本管理类
cout<< pDtr->Construct(xxx)<<endl;//生成文档

4)单例(单件)模式

二、行为型模式

1)策略模式

2)观察者模式

3)命令模式

4)迭代器模式

5)状态模式

6)中介者模式

7)备忘录模式

8)职责链模式

9)访问者模式

10)解释器模式

三、结构型模式

1)组合Composite

2)享元Flyweight

3)代理模式Proxy

4)适配器模式Adapter

5)桥接模式Bridge

6)外观模式

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

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

相关文章

Unity Asset Bundle Browser 工具

Unity Asset Bundle Browser 工具 您可以在 Unity 项目中使用 Asset Bundle Browser 工具能够查看和编辑资源包的配置。 有关更多信息&#xff0c;请参阅 Unity Asset Bundle Browser 文档。 注意&#xff1a;此工具是不受支持的实用程序。查看极大的资源包可能会导致性能下…

关于µC/OS-III 多任务的基本理解

关于C/OS-III 多任务的基本理解 任务和任务管理是 RTOS 的核心&#xff0c;且大多数项目使用 RTOS 的目的就是为了使用 RTOS 的多任务管理能力。 C/OS-III作为经典的RTOS&#xff0c;了解并学习其任务管理机制&#xff0c;是非常有必要的。 文章目录 关于C/OS-III 多任务的基本…

SQL SERVER 如何实现UNDO REDO 和PostgreSQL 有近亲关系吗

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,SQL Server&#xff0c;Redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 l…

Excel VSTO开发5 -Excel对象结构

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 5 Excel对象结构 Excel提供了几个比较重要的对象&#xff1a; Application、Workbooks、Workbook、Worksheets、Worksheet 为了便…

Mp4文件提取详细H.264和MP3文件

文章目录 Mp4文件提取为H.264和MP3文件**提取视频为H.264&#xff1a;****提取音频为MP3&#xff1a;** 点赞收藏加关注&#xff0c;追求技术不迷路&#xff01;&#xff01;&#xff01;欢迎评论区互动。 Mp4文件提取为H.264和MP3文件 要将视频分开为H.264&#xff08;视频编…

栈 之 如何实现一个栈

前言 栈最鲜明的特点就是后进先出&#xff0c;一碟盘子就是类似这样的结构&#xff0c;最晚放上去的&#xff0c;可以最先拿出来。本文将介绍的是如何自己实现一个栈结构。 栈的操作 栈是一种先进后出&#xff08;Last-In-First-Out, LIFO&#xff09;的数据结构&#xff0c…

Ubantu终端常用命令、快捷键和基本操作

目录 前言 一、常用命令 二、常用快捷键 三、快捷键自定义设置 总结 前言 Ubantu终端常用命令和快捷键用于进行系统管理、文件操作、软件安装等常见使用场景。使用它们可以提高工作效率&#xff0c;简化操作流程&#xff0c;并进行更多的自定义配置和控制。同时&#xff0c…

[SSR渲染学习]nuxt的跨域处理

nuxt跨域请求其他api // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({devtools: { enabled: true },css: [//共享css处理,不是重点可以看看,:是当前文件根目录/assets/css/global.css],//跨域处理nitro: {devProxy: {/go1-api:{ta…

jenkins创建用户

一.背景 之前用了很多次&#xff0c;现在转到甲方爸爸的岗位&#xff0c;要培养大学毕业生&#xff0c;才发现好记性不如烂笔头。给年轻人写出来。 二.创建用户的过程 1.用户管理界面入口 Dashboard>Manage Jenkins>Jenkins own user database 2.点击右边的按钮“Cre…

docker容器内访问宿主机127.0.0.1服务

docker容器内访问宿主机127.0.0.1服务 原创 技术生活 技术生活 2020-04-15 09:00 点击上方”技术生活“&#xff0c;选择“设为星标” 做积极的人&#xff0c;而不是积极废人 背景 原因分析 解决方案 背景 已经通过docker启动的elasticsearch 服务&#xff0c;监听端口9…

深入《C++ Core Guidelines解析》:提升C++编程实践的关键指南

目录 1、写在前面2、推荐理由3、内容介绍4、作者介绍5、赠书 or 购买 1、写在前面 C Core Guidelines是一个正在进行的开源项目&#xff0c;通过将广泛认可的现代C上佳实践集中在一个地方来解决这些问题。Core Guidelines依赖于几十年的经验和早期的编码规则。它们与C本身共享一…

数据结构 每日一练:将带头结点的单链表就地逆置(视频讲解两种方法)

目录 方法一 算法视频分析 方法二 算法视频分析 Q&#xff1a;什么是“就地”捏&#xff1f; A&#xff1a;就是指辅助空间复杂度为O(1)&#xff0c;通俗一点来说就是不需要再开辟一块空间来实现算法。 特别说明&#xff1a; 笔者第一次录制视频&#xff0c;言语有些不顺&…

MySQL——常见问题

NULL和空值的区别 1、空值不占空间&#xff0c;NULL值占空间。当字段不为NULL时&#xff0c;也可以插入空值。 2、当使用 IS NOT NULL 或者 IS NULL 时&#xff0c;只能查出字段中没有不为NULL的或者为 NULL 的&#xff0c;不能查出空值。 3、判断NULL 用IS NULL 或者 is no…

SQL Server对象类型(3)——4.3.视图(View)

4.3.1. 视图概念 与Oracle中的视图类似,SQL Server中的视图也是一种虚的、通过一个查询定义的逻辑对象,主要用于集中、简化、定制用户需求,控住其底层表安全,以及应用系统提供向后兼容等方面。 --注: 1)上述内容中的“虚的”,表示视图本身并不实际包含和存储数据,SQL…

Win10 ping 虚拟机kali 请求超时解决办法

出现这种问题应该是windows休眠导致的 这里我的解决方法是先禁用再启用连接 然后再ping 虚拟机ip和kali ip&#xff0c;发现就可以连上了

vue前后端端口不一致解决方案

在config index.js文件中 引入如下代码即可 const path require(path) const devEnv require(./dev.env) module.exports {dev: {// PathsassetsSubDirectory: static,assetsPublicPath: /,proxyTable: devEnv.OPEN_PROXY false ? {} : {/api: {target: http://localhos…

2023高教社杯数学建模国赛B题思路解析+代码+论文

下文包含&#xff1a;2023高教社杯数学建模国赛B题思路解析代码参考论文等及如何准备数学建模竞赛&#xff08;7号比赛开始后逐步更新&#xff09; C君将会第一时间发布选题建议、所有题目的思路解析、相关代码、参考文献、参考论文等多项资料&#xff0c;帮助大家取得好成绩。…

工作和生活中,如何用项目管理思维解决复杂的事情?

在工作和生活中&#xff0c;许多事情都可以采用项目思维方式来解决。当我们逐渐将工作和生活中的各种事务以项目的方式来处理和推进时&#xff0c;我们可能并没有意识到&#xff0c;实际上我们正在运用项目管理思维。 项目管理思维能帮助我们在面对繁杂事务时&#xff0c;理清…

PY32F003F18按键输入

一、PY32F003F18的GPIO介绍 1、PY32F003F18的18个I/O&#xff0c;均可作为外部中断&#xff1b; 2、每个GPIO都可以由软件配置为输出&#xff1a; 1)、推挽输出(push-pull) 2)、开漏极输出(open drain) 注意:驱动电流为8mA; 3、每个GPIO都可以由软件配置为输入&#xff1a; 1)、…

android 离线语言合成(文字转语音)

1、基于开源MaryTTS https://github.com/AndroidMaryTTS/AndroidMaryTTS 目前查到的资料&#xff0c;不支持中文&#xff0c;只针对西方语种。 2、基于TensorFlowTTS 官方个地址&#xff1a;为 Android 构建 TensorFlow Lite 库 (google.cn) 所依赖包下载地址:Maven Centr…