设计模式笔记

2019-12-24 发布
2022-2-7 修改

A. 创建型模式

1. 工厂 factory
2. 单例 singleton
3. 建造者 builder
4. 原型 prototype

实现:1. 缓存对象实例。
   2. 用 Object.clone() 代替new Object() 获得对象实例。
   3. 再用set函数修改对象属性。
好处:利用缓存和clone()节省new 对象消耗的资源。
场景:当直接创建对象的代价比较大时,则采用这种模式。

B. 结构型模式

5.适配器 adapter
6.桥接 bridge

  1. 优点概念上:概念接口分离;易扩展(添加接口实现类);实现细节对客户端透明。
  2. 具体表现为:将继承关系转化成关联关系,它降低了类与类之间的耦合度。
  3. 实现:概念模型:抽象类;实现:接口。
    维度一:具体概念模型,继承抽象类。
    维度二:具体特征(实现类)实现接口。
    维度三:… (可以通过关联,关联多个实体属性[接口])
    在这里插入图片描述

7. 过滤器 filter

8. 组合 Composite

对于树形结构,树枝节点和叶子节点实现统一接口,客户端可以忽略二者不同。
优点:调用简单
缺点:违反依赖倒置原则(上层看的见下层)
实现:1. 树枝节点有List<Component> childNodes;
   2. 树枝节点的接口行为遍历调用list里的子节点的接口行为。

9. 装饰器 Decorator

与桥接的区别:1. 实体抽象类不仅关联抽象接口,而且实现抽象接口
   2. 桥接模式能桥接多个API属性;装饰器模式向现有对象动态添加属性,而不用使用子类。

10. 外观 facade
11. 享元 flyweight

尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
主要用于减少创建对象的数量,以减少内存占用和提高性能。
注意:用第一个对象获取第二个对象,如果修改了第二个对象的属性,第一个对象也会随之改变。如果希望不改变,使用原型模式(利用clone)
实现:1. 创建一个工厂
   2. 存一个Map缓存
   3. 生成对象时,如果map里有,直接返回,否则往map里添加一个新对象。
例子:spring 单例池

12. 代理 proxy

C. 行为型模式

13. 责任链 chain of responsibilities

意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
何时使用:在处理消息的时候以过滤很多道。
优点: 1、降低耦合度。它将请求的发送者和接收者解耦。 2、简化了对象。使得对象不需要知道链的结构。 3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。 4、增加新的请求处理类很方便。
缺点: 1、不能保证请求一定被接收。 2、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。 3、可能不容易观察运行时的特征,有碍于除错。

14. 命令 command
15. 解释器 Interpreter Pattern
16. 迭代器 Iterator Pattern
17. 中介者 Mediator Pattern

引入中介者,让网状结构的耦合关系变成星型结构。
优点: 1、降低了类的复杂度,将一对多转化成了一对一。 2、各个类之间的解耦。 3、符合迪米特原则。
缺点:中介者会庞大,变得复杂难以维护。

18. 观察者 Observer Pattern
19. 状态 State Pattern
在这里插入图片描述

意图:消除条件分支
缺点:对开闭原则支持不好(新增一个状态时,需要修改状态转换代码)

20. 空对象 Null Object Pattern

当查询无结果时,用一个空对象代替Null
好处:节省了许多空值判断;避免NPE;空对象可以提供默认行为。

21. 策略 Strategy Pattern
22. 模板 Template Pattern
23. 访问者 Visitor Pattern

  1. 目的:分离数据结构与数据操作
  2. 使用场景:数据结构稳定,但对数据有许多互相无关的或者异变的操作。隔离数据结构与操作,避免变化的操作“污染”不变的结构。
  3. 符合单一职责原则
  4. 违反迪米特原则
  5. 违反依赖倒置原则

24. MVC Pattern
25. 业务代表 Business Delegate Pattern

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值