自己理解设计模式,梳理一下

有关设计模式,偶然间发现:https://refactoringguru.cn/design-patterns/cpp

创建型设计模式:

单例模式:

​ 利用static特性,在栈上,堆上申请单例对象,注意线程安全以及资源释放。

简单工厂模式:

​ 工厂方法:通过函数入参决定生产哪种产品(构造子类对象)。

​ 简单工厂:工厂类由继承基类的方法,具体产品的实例化交给子类,

​ ==》生产单一种类的产品

抽象工厂模式:

​ 如果要生产搭配组合型产品,如电视型号+遥控型号的组合,可以创建超级工厂定义基类。

​ 由具体的子类实例化实现不同的搭配,产品的构造。

建造者模式:

​ 提供一种封装,管理各个子对象的创建。

​ 如:房屋类建筑的构造,由门,走廊,等不同模块不同构造组装而成。

​ 定义一个基本的产品类,由建造者管理这个类的一个对象,去构建不同的模块,最后实现组装返回。

原型模型:

​ 提供一个接口,实现类对象的复制功能。 如试卷复印,需要副本,简化构造析构时使用。

​ 这里在实现clone函数的时候,实际上是调用拷贝构造函数,需要注意类内成员的深拷贝和浅拷贝问题。

结构型设计模式:

代理模式:

对目标要访问的结构做封装,通过中间类对象访问的方式。

中介和保护的作用。

远程代理:为一个对象的地址空间提供局部代表。 		==》通过代理,实际是做远程通信
虚拟代理:根据需要来创建开销较大的对象。		 ==》对开销大的对象做封装,真正使用时做整整委托调用
保护代理:用于对象应该具有不同访问权限的场景,控制对原始对象的访问。
智能指引:取代简单的指针,它在访问对象时执行一些附加操作。
-- 引自《设计模式:可复用面向对象软件的基础》

桥接模式:

一个目的是可以替换继承。 使用组合,代替了继承实现了抽象和具体的解耦。

抽象部分与实现部分分离,使它们都可以独立的变化。

如,有多种操作系统,也有多种可运行平台,可以分别实现各自的模块。

​ 通过一个桥接类,可以对操作系统对象和平台对象做管理。(类似组合,可以扩展用到继承统一接口,实现多对多)

简单想:就是用一个中间类连接管理了另外两个类对象,实现了一对一关联。 可以用继承扩展多对多。

适配器模式:

如:已有的环境使用接口恒定,但是,员工实现的接口不匹配,需要增加一个适配器,把我们的接口适配成原调用接口。

例如:各种不同的设备要在220v电压下充电,需要一个适配器,将220v电压转换成我们需要的各种电压。

目标已经无法修改,我们需要对现有的适配者进行一定的处理,使其能和目标一致。

外观模式:

通过一个中间管理类,管理了一些列内部动作/(子系统的构造,业务模块的构造),简化使用流程。

享元模式共享工厂:

大量细粒度对象的构建,用一个对象管理,持续使用。

例如:五子棋游戏中黑白棋子的落子动作。

装饰器模式

不改变现有对象的前提下,通过继承的方式,给现有的类上新增新的功能。

组合模式:

部分整体模式:把一组相似的对象当作单个对象。

可以实现管理公司部门层级,人员管理的场景

行为型结构 设计模式

备忘录模式:

保存对象的某个状态,适当的时候进行恢复,最好使用友元类的方式进行使用。

场景:ctrl+z动作,游戏场景中复活动作,数据库事务

策略模式:

实现某种目的,有多种不同的方案,可以使用策略模式:

如算法实现方案,出行方式(飞机,汽车,火车),卖东西打折方案,

可以用一个基类指针做入口选择不同的策略,也可以用入参的方式实现。

迭代器模式:

提供一些接口,实现不同方案遍历集合内元素的方案。

访问者模式:

在被访问的类中,提供对应的接口,让访问者类实现不同的业务。

如:银行的柜台业务可以是被访问者,用户作为访问者。

​ 普通员工的职能权限,和管理者的只能权限

观察者模式:

当对象之间存在一对多,多对多的关系时,使用观察者模式。

方案1:推模型,当消息有变更时,直接向内部保存的观察者们中主动发消息

方案2:拉模型,需要一个注册中心的管理,观察者们主动订阅某类型的消息。

​ 当消息触发时,主动把消息主题发送给观察者们,主动根据主题拉取消息。

解释器模式:

类似于词法分析器的功能,提供对应的接口,对输入的数据进行特定逻辑的解析,如:数学运算。

命令模式:

请求以命令的形式,包裹在对象中,传给调用对象,调用对象内部,根据命令查找可以处理该命令的执行对象。

例如:实现对大量命令的处理管理,可以对模块进行划分,通过指令对应执行对象控制模块的执行。

模板模式:

基类定义具体的数据结构和对外接口,由子类进行具体的行为实现。

如:建造者模式中,门,走廊,房间的细节实现交给子类。

责任链模式:

请求者的处理需要多个对象依次处理,并且有一定的先后依赖关系,如某些算法的实现流程把控,可以用责任链。

对一个请求,需要多个不同对象依次处理,需要指定好下一个处理对象。

如:请假电子流需要各级领导的审批。

中介者模式:

用一个中间对象,实现一些列其他对象的消息交互。

如:租户与房东无法直接沟通,但是都可以与房屋中介沟通。

状态模式:

将基于switch语句的大型状态该机转换为对象。

1:关注各个状态对应的局部实现细节。

2:由调用者直接构造对象控制访问哪个状态。 (控制流程)

如:可以把一个大的流程划分几个不相干的子流程,通过状态标志,实现各子流程的同步调用。

​ ==》如:工厂的流水线 ,对生产产品的流程控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值