GoF23种设计模式 简介

发布于:2025-02-11 ⋅ 阅读:(31) ⋅ 点赞:(0)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

面向对象(OO)设计原则(7)

在这里插入图片描述
可维护性(Maintainability) ,可复用性(Reusability)
在这里插入图片描述

单一职责原则

一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中

在这里插入图片描述
在这里插入图片描述

开闭原则

软件实体应当对扩展开放,对修改关闭

在这里插入图片描述
在这里插入图片描述

里氏代换原则

所有引用基类的地方必须能透明地使用其子类的对象

在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常:

在这里插入图片描述

继承重写的类应可使用:

在这里插入图片描述
cipher 密码

依赖倒转原则

高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象

要针对接口编程

在这里插入图片描述
增加一个新的类型时需要修改源代码了,违背了开闭原则。

在这里插入图片描述

MainClass 依赖 抽象。

接口隔离原则

客户端不应该依赖那些它不需要的接口

在这里插入图片描述

在这里插入图片描述
这里三个Service可能差异特别大,比如openGL的片元着色器fshader,可能有的模型网格就没有纹理,有的不需要影子,这些网格就可以单独用一个着色器。🤓

合成复用原则

优先使用对象组合,而不是继承来达到复用的目的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自己留Operator

迪米特法则

应该尽量减少对象之间的交互

每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位

在这里插入图片描述
在这里插入图片描述

创建型模式 (5)

工厂方法模式 (类模式,其余都是对象模式)

有生产方法接口,具体内容由继承后重写决定。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

当涉及到多个工厂和多个商品时,工厂方法模式通常会发展为抽象工厂模式。

抽象工厂模式

【不同厂子与相同产品】调用同样的类的方法<多态>
在这里插入图片描述

在这里插入图片描述

建造者模式

【车与造车】

产品本身与产品的创建过程解耦

在这里插入图片描述
在这里插入图片描述

原型模式

【拷贝用的函数】

复制 (深/浅)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

单例模式

确保一个类只有一个实例

在这里插入图片描述


结构型模式 (7)

结构型模式(Structural Pattern)关注如何将现有类或对象组织在一起形成更加强大的结构。

类结构型模式 关心类的组合 【继承关系和实现关系】

对象结构型模式 关心类与对象的组合

适配器模式

【接口转换】

(包装器(Wrapper)模式)

在这里插入图片描述
在这里插入图片描述

桥接模式

【抽象与实现解耦】

在这里插入图片描述
形状与颜色两个维度。

在这里插入图片描述
在这里插入图片描述

组合模式

【树形结构】

在这里插入图片描述

在这里插入图片描述
(多叶子)

装饰模式

【动态增加职责】(比子类灵活)
在这里插入图片描述
在这里插入图片描述
拿到成员,可以调用他的所有方法;若有get方法,就能获取成员。

外观模式

【一组接口放一起调用】

<迪米特法则> 引入一个新的外观角色来降低原有系统的复杂

在这里插入图片描述

在这里插入图片描述
facade 外观

享元模式

【共享技术】
在这里插入图片描述
在这里插入图片描述

HashMap可作享元池,存在直接取,不存在再new.

代理模式

【由代理对象来控制对原对象的访问】

在这里插入图片描述

在这里插入图片描述
extends 扩展

同装饰模式一样,也是加一层。

不过装饰模式想增强功能,而这里是想加条件,而不是改变目标对象的行为。

装饰模式(Decorator) 与 代理模式(Proxy) 的根本区别

装饰模式的主要目的是增强或扩展对象的功能,动态地为对象增加额外的功能或行为。
代理模式的主要目的是控制对目标对象的访问,通常用于延迟加载、安全控制等,而不是改变目标对象的行为。


行为型模式 (11)

行为型模式(Behavioral Pattern) 关注系统中对象之间的交互。

类行为型模式 通过多态等方式来分配父类与子类的职责

对象行为型模式 通过对象关联等方式来分配两个或多个类的职责

解释器模式 (类模式)

解释器用定义的表示解释句子。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
node 节点
在这里插入图片描述

模板方法模式(类模式)

基于继承的代码复用技术
在这里插入图片描述
在这里插入图片描述
抽象方法(Abstract Method)
具体方法(Concrete Method)
钩子方法(Hook Method) <插入点>挂接自定义代码
在这里插入图片描述

职责链模式

接收对象连接成一条链,沿着传递,直到有一个对象能够处理它为止。

在这里插入图片描述
在这里插入图片描述
successor 继承人。类成员维持了对下家的引用

命令模式

请求封装为对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

迭代器模式

又名游标(Cursor)模式

提供一种方法顺序访问一个聚合对象中的各个元素,且不用暴露该对象的内部表示。

在这里插入图片描述
在这里插入图片描述
由迭代器来提供遍历聚合对象内部数据的行为,简化聚合对象的设计,更符合单一职责原则

在这里插入图片描述

中介者模式

封装多对多交互。可以使对象之间的关系数量急剧减少。

QQ群
在这里插入图片描述
用户只需要将信息或文件发送到群中或上传为群共享文件即可,群的作用就是将发送者所发送的信息和文件转发给每一个接收者,将极大地减少系统中用户之间的两两通信。

在这里插入图片描述
colleague 同事

备忘录模式

快照。

在这里插入图片描述
在这里插入图片描述
originator 创始人
memento 纪念品
caretaker 管理员

观察者模式

一对多,状态改变通知。

在这里插入图片描述

在这里插入图片描述

假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式描述该过程:
在这里插入图片描述

状态模式

状态改变时改变行为。
在这里插入图片描述
在这里插入图片描述

策略模式

算法封装,可替换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

访问者模式

在不改变各元素的类的前提下定义新操作。

在这里插入图片描述
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到