设计模式23种
1.设计模式6原则
2.设计模式23种
3.设计模式 - 单例模式4.设计模式 - 原型模式5.设计模式 - 抽象工厂6.设计模式 - 工厂方法7.设计模式 - 解释器模式8.设计模式 - 代理模式9.设计模式 - 外观模式10.设计模式 - 装饰者模式11.设计模式 - 组合模式12.设计模式 - 适配器模式13.设计模式 - 桥接模式14.设计模式 - 建造者模式15.设计模式 - 享元模式16.设计模式 - 策略模式17.设计模式 - 访问者模式18.设计模式 - 状态模式19.设计模式 - 迭代器模式20.设计模式 - 观察者模式21.设计模式 - 命令模式22.设计模式 - 中介者模式23.设计模式 - 备忘录模式24.设计模式 - 职责链模式25.设计模式 - 模板方法模式创建型
对象的创建。5
创建型 | 定义 | 可变部分(允许独立变化,而又不会导致重新设计) |
---|---|---|
工厂方法 Factory Method |
定义创建对象的接口,让子类决定实例化 | 被实例化的子类 |
抽象工厂 Abstract Factory |
提供创建一系列相关或依赖对象的接口,无需指定具体类 | 产品对象家族 |
原型 Prototype |
拷贝原型,创建新对象 | 被实例化的类 |
单例 Singleton |
一个类仅有一个实例 | 一个类的唯一实例 |
建造者 Builder |
复杂对象的构建与表示分离,构建过程创建不同的表示 | 如何创建一个组合对象 |
结构型
处理类或对象的组合。7
结构型 | 定义 | 可变部分 |
---|---|---|
适配器 Adapter |
类的接口转换,不兼容的类可以一起工作 | 对象的接口 |
桥接 Bridge |
类的抽象与实现分离,都可以独立地变化 | 对象的实现 |
组合 Composite |
对象组合成树形结构,使用具有一致性 | 一个对象的结构和组成 |
装饰者 Decorator |
动态添加额外的职责,扩展功能更灵活 | 对象的职责,不生成子类 |
外观 Facade |
一组接口提供一个高层接口,使子系统更加容易使用 | 一个子系统的接口 |
享元 Flyweight |
共享支持细粒度对象 | 对象的存储开销 |
代理 Proxy |
其他对象代理控制这个对象的访问 | 如何访问一个对象;该对象的位置 |
行为型
对象间的通信。11
行为型 | 定义 | 可变部分 |
---|---|---|
解释器 Interpreter |
给定语言,定义文法表示和解释器,解释句子 | 一个语言的文法及解释 |
模板方法 Template Method |
定义操作的骨架,将一些步骤延迟到子类中 | 算法中的某些步骤 |
职责链 Chain of Responsibility |
为解除耦合,使多个对象都有机会处理这个请求 | 满足一个请求的对象 |
命令 Command |
请求封装为对象,参数化请求,可取消操作 | 何时、怎样满足一个请求 |
迭代器 Iterator |
顺序访问聚合对象 | 如何遍历各元素 |
中介者 Mediator |
中介对象封装对象交互 | 对象间交互 |
备忘录 Memento |
捕获对象的内部状态并保存,可将对象恢复 | 哪些私有信息,何时存储 |
观察者 Observer |
一个对象的状态发生改变,所有依赖对象都得到通知并刷新 | 多个对象依赖于另外一个对象,如何保持一致 |
状态 State |
对象内部状态改变时改变它的行为 | 对象的状态 |
策略 Strategy |
一系列的算法,可替换 | 算法 |
访问者 Visitor |
不改变各类的前提下定义新操作 | 某些可作用于一个/组对象的操作,但不修改这些对象的类 |
UML类图
其中,
关系 | 说明 | 备注 |
---|---|---|
依赖 ----> | 临时性的关联,最弱 | 常用于 局部变量、函数参数、返回值等 |
关联 | 引用关系 | 单向/双向,常用于 类的属性表达 |
聚合 | 整体 contains 局部 | 常用于 构造、Setter或业务方法,可单独存在 |
组合 | 整体 has 局部 | 在整体构造方法中实例化,同生命周期 |
多重性 | 通常在关联、聚合、组合中使用 | N...N(*) |
合集:
设计模式 23
分类:
Design Pattern
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)