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

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

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

创建型设计模式:

单例模式:

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

简单工厂模式:

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

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

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

抽象工厂模式:

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

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

建造者模式:

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

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

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

原型模型:

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

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

结构型设计模式:

代理模式:

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

中介和保护的作用。

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

桥接模式:

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

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

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

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

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

适配器模式:

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

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

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

外观模式:

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

享元模式共享工厂:

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

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

装饰器模式

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

组合模式:

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

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

行为型结构 设计模式

备忘录模式:

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

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

策略模式:

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

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

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

迭代器模式:

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

访问者模式:

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

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

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

观察者模式:

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

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

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

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

解释器模式:

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

命令模式:

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

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

模板模式:

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

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

责任链模式:

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

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

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

中介者模式:

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

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

状态模式:

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

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

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

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

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

目录
相关文章
|
设计模式 关系型数据库
【设计模式——学习笔记】设计模式简介+七大设计原则介绍(下)
【设计模式——学习笔记】设计模式简介+七大设计原则介绍
173 0
|
5月前
|
设计模式 Java 关系型数据库
设计模式——设计模式简介和七大原则
设计模式的目的和核心原则、单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则
|
8月前
|
设计模式 存储 前端开发
清晰理解基本的架构设计模式
【6月更文挑战第16天】广泛应用在如Spring、Merb、Django和.NET MVC等框架中。核心价值在于组件解耦,适合插件化和Web应用。尽管有变体,如Django的MTV,关键在于明确的分离。[1978原文][1] | [IBM文档][2]
96 8
清晰理解基本的架构设计模式
|
9月前
|
设计模式 算法 Java
【设计模式系列笔记】设计模式与设计原则
设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 设计原则是一些通用的设计指导方针,它们提供了如何设计一个优秀的软件系统的基本思想和规则。指导着设计者如何组织代码以实现高内聚、低耦合、易扩展和易维护的软件系统。
107 4
|
设计模式 SQL Java
设计模式的七大原则(设计模式必修课)
设计模式(Design Pattern)是针对于软件设计中反复出现的问题所提出来的一个解决方案,是前人对代码开发经验的总结,它不是语法规定,学好设计模式可以开阔我们的编程思维,让我们编写的程序具备可复用性、可扩展性、可读性、可靠性以及安全性等;
7825 0
|
设计模式 算法 Java
设计模式宏观篇
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。
|
9月前
|
设计模式
【设计模式】1、设计模式七大原则
【设计模式】1、设计模式七大原则
47 0
|
9月前
|
设计模式 数据处理 数据安全/隐私保护
如何将设计模式责任链模式运用到工作当中
如何将设计模式责任链模式运用到工作当中
|
设计模式 Java 程序员
【设计模式——学习笔记】设计模式简介+七大设计原则介绍(上)
【设计模式——学习笔记】设计模式简介+七大设计原则介绍
66 2
|
设计模式 算法
设计模式一句话概括
设计模式一句话概括
59 0