设计模式学习笔记
【摘要】 DesignPattern名称类别描述扩展单例模式创建型系统中只存在一个对象饿汉式、懒汉式、双重检查锁、静态内部类、枚举代理模式结构型代理类附加的功能和原始类无关为原始类处理和业务无关的功能桥接模式结构型系统有两个变化的维度,将和主业务无关的功能封装在桥接接口中桥接接口和业务类两个维度独立变化装饰器模式结构型装饰类增强了原始类的功能扩展原始类的业务功能适配器模式结构型适配类实现了新的接口,...
设计模式概览
名称 | 类别 | 描述 | 扩展 |
---|---|---|---|
单例模式 | 创建型 | 系统中只存在一个对象 | 饿汉式、懒汉式、双重检查锁、静态内部类、枚举 |
代理模式 | 结构型 | 代理类附加的功能和原始类无关 | 为原始类处理和业务无关的功能 |
桥接模式 | 结构型 | 系统有两个变化的维度,将和主业务无关的功能封装在桥接接口中 | 桥接接口和业务类两个维度独立变化 |
装饰器模式 | 结构型 | 装饰类增强了原始类的功能 | 扩展原始类的业务功能 |
适配器模式 | 结构型 | 适配类实现了新的接口,并封装原始类的功能 | 将两个无关的类耦合起来,可以用来消除if-else判断 |
门面模式(外观模式) | 结构型 | 门面类为被封装的子类提供统一访问接口 | 易用性、性能 |
组合模式 | 结构型 | 将对象组织为整体-部分的树型结构 | 简化代码逻辑 |
享元模式 | 结构型 | 将不可变数据抽象为共享对象 | 减少内存消耗 |
观察者模式 | 行为型 | 主题对象发生变化时通知所有观察者,观察者是被动的 | 观察者不用时刻关注主题对象的状态 |
模板模式 | 行为型 | 利用回调可以实现更灵活的模板功能 | 提高代码复用率、方便扩展框架 |
策略模式 | 行为型 | 解耦策略的定义、创建和使用 | 减少代码改动 |
责任链模式 | 行为型 | 业务类放在一个链上,新增业务类不会影响已有的类 | 每个业务类未必要有successor |
状态模式 | 行为型 | 状态、事件、动作,对象和其状态解耦 | 适用于状态少、动作复杂的场景 |
迭代器模式 | 行为型 | 通过迭代器封装遍历集合的操作 | 无需将遍历操作放在集合中,便于在客户端替换遍历算法 |
访问者模式 | 行为型 | 数据结构稳定、逻辑不确定,数据对象接收逻辑对象,再通过回调方式处理数据对象 | 相比工厂模式,类的数量少 |
命令模式 | 行为型 | 将不同的命令封装起来 | 不同的命令不可替换 |
设计模式关联
策略-命令
策略模式:不同的策略具有相同的目的、不同的实现、互相之间可以替换。比如,BubbleSort、SelectionSort都是排序算法,可以相互替换。
命令模式中:不同的命令具有不同的目的,对应不同的处理逻辑,并且互相之间不可替换。
原型-享元
原型和享元减少了对象创建的开销,在进行性能优化时效果明显
观察者-访问者
被观察者要通知所有的观察者,被访问者只接收一个访问者
观察者
- 优点:观察者可以根据被观察者的状态独立进行响应
- 缺点:观察者太多影响效率
- 优化方案:观察者工作时采用多线程的方式
访问者
- 优点:适用于数据结构稳定且类较多的场景,增加或减少访问者对数据结构没有影响
- 缺点:数据结构的变化会影响到所有的访问者
- 优化方案:增加默认访问者(其他所有的访问者都继承该默认访问者),默认访问者处理所有的被访问者。这样被访问者增加时只需要修改默认访问者即可
- 单分派:对象的哪个方法被执行只和参数的编译时类型有关;双分派:参数的运行时类型会决定哪个方法被执行
观察者-组合
观察者+组合模式,可以用来处理复杂树形数据结构,例如:语法树
状态-享元
状态
状态模式的重点有两个,一个是状态,另一个是状态实体。状态实体和状态互相依赖。具体执行动作的是状态,执行动作后状态实体的状态发生改变。
享元
用享元模式共享状态,避免重复创建状态
模板-观察者
同步回调可以看做是模板模式、异步回调更接近观察者模式
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)