首页 > 其他 > 详细

16. 设计模式总结与对比

时间:2021-04-06 12:27:45      阅读:13      评论:0      收藏:0      [点我收藏+]

1、总结设计原则和 GOF 23,做整体认知

2、为之后深入学习源码分析做铺垫

3、了解各设计模式之间的关联,解决设计模式混淆的问题

一、七大设计原则

技术分享图片

二、GOF 23 模式

Ⅰ简介

1、《Design Patterns:Elements of Reusable Object-Oriented Software》[ 即,后述《设计模式》一书 ]

2、由 Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides 合著 [ Addison-Wesley,1995 ]

3、这几位作者常被称为 " 四人组 [ Gang Of Four ] ",而这本书也就被称为" 四人组 [ 或 GOF ] "书

4、GOF 的设计模式是 Java 基础知识 和 J2EE 框架知识之间的一座 " 隐性的桥 "

Ⅱ GOF设计模式分类

1. 创建型 [ Creational ]

设计模式 一句话总结 目的 生活方案 框架源码举例
工厂模式
[ Factory ]
产品标准化
生产更高效
封装创建细节 实体工厂 LoggerFactory
Calender
单例模式
[ Singleton ]
世上只有一个秦始皇 保证独一无二 CEO BeanFactory
Runtime
原型模式
[ Prototype ]
拔一根猴毛
吹出千万个
高效创建对象 克隆 ArrayList
PrototypeBean
建造者模式
[ Builder ]
高配中配低配
想选哪配就哪配
开放个性配置步骤 选配 StringBuffer
BeanDefinitionBuilder

2. 结构型 [ Structural ]

设计模式 一句话归纳 目的 生活案例 框架源码举例
代理模式
[ Proxy ]
没有资源没时间
得找媒婆来帮忙
增强职责 媒婆 ProxyFactoryBean
JdkDynamicAopProxy
CglibAopProxy
门面模式
[ Facade ]
打开一扇门
走向全世界
同意访问入口 前台 JdbcUtils
RequestFacade
装饰器模式
[ Decorator ]
万剑归一 灵活扩展,同宗同源 煎饼 BufferedReader
InputStream
享元模式
[ Flyweight ]
优化资源配置
减少重复浪费
共享资源池 全国社保联网 String
Integer
ObjectPool
组合模式
[ Composite ]
人在一起叫团伙
心在一起叫团队
统一整体和个体 组织架构数 HashMap
SqlNode
适配器模式
[ Adapter ]
适合自己的
才是最好的
兼容转换 [求同存异] 电源适配器 AdvisorAdaper
HandlerAdaper
桥接模式
[ Bridge ]
约定优于配置 不允许继承 DriverManager

3. 行为型 [ Behavioral ]

设计模式 一句话归纳 目的 生活案例 框架源码举例
委派模式
[ Delegate ]
这个需求很简单怎么实现我不管 只对结果负责 授权委托书 ClassLoader
BeanDefinitionParserDelegate
模板方法模式
[TemplateMethod]
流程全部标准化
需要微调请覆盖
逻辑服用 把大象装进冰箱 JdbcTemplate
HttpServlet
策略模式
[ Strategy ]
条条大路通罗马 把选择权交给用户 选择支付方式 Comparator
InstantiationStrategy
责任链模式
[ Chain Of Responsibility ]
各人自扫门前雪
莫管他人瓦上霜
解耦处理逻辑 踢皮球 FilterChain
Pipeline
迭代器模式
[ Iterator ]
流水线上坐一天
每个包裹扫一遍
集合的统一访问 统一刷脸进站 Iterator
命令模式
[ Command ]
运筹帷幄之中
决胜千里之外
解耦请求和处理 遥控器 Runnable
TestCase
状态模式
[ State ]
状态驱动行为
行为决定状态
绑定状态和行为 订单状态跟踪 Lifecycle
备忘录模式
[ Memento ]
给我一剂"后悔药" 备份 草稿箱 StateManageableMessageContext
中介者模式
[ Mediator ]
联系方式我给你
具体操作只看你
统一管理资源 朋友圈 Timer
解释器模式
[ Interpreter ]
我想说"方言"
一切解释权归我所有
特定语法解析 摩斯密码 Pattern
ExpressionParser
观察者模式
[ Observer ]
到点就通知我 解耦 : 观察者,被观察者 闹钟 ContextLoaderListener
访问者模式
[ Visitor ]
横看成岭侧成峰
远近高低各不同
解耦 : 数据结构,数据操作 KPI考核 FilVisitor
BeanDefinitionVisitor

三、模式对比

1)代理VS中介

代理,职责增强,不仅要建立联系,还要参与过程

中介,只负责牵线搭桥,建立联系

2)代理VS装饰器

代理,组合实现功能增强和扩展

装饰,继承实现增强和扩展

3)代理VS委派

代理,一定会有增强

委派,全权的静态代理,不做任何的增强

何功能增强的代理就叫委派。

4)委派VS责任链

委派,没有流程的概念,只需要拿到结果

责任链,处理流程,处理流程可扩展,可定制,最终由责任链中的某些 Handler来决定

5)委派VS门面

在门面里面,可能会用到委派模式实现任务分发

6)门面模式VS装饰器

门面,打开一扇窗,通向全世界,统一入口,背后很多子系统,承担一定的静态代理

装饰器,为了扩展,一定是同宗同源的

7)建造者VS装饰器

建造者,强调对象创建步骤的个性化

装饰器,更加强调扩展性,大桶套小捅

8)行为型 VS 结构型

行为型,对 Java 中的方法的使用提出的建议

结构型,对 Java 类的组合提出建议

创建型,对创建 Java 对象的形式提出的建议

9)抽象工厂VS模板方法

抽象工厂,形式上可能会出现抽象方法,但是并不能体现流程。

模板方法,也是有可能出现抽象方法,但一定是某个流程中的一个步骤

10)工厂模式VS策略模式

一般来说他们两个会组合使用,策略将由工厂来创建

11)工厂方法VS抽象工厂

工厂方法,产品扩展

抽象工厂,产品等级结构和产品组的相互扩展关系,多维度,至少是二维

12)桥接模式VS中介者

共同点,不用结成,一定是组合

桥接,两个维度建立链接

中介者,多维度建立链接 [ 一个更复杂的桥接模式的实现 ]

13)桥接模式VS组合模式

桥接,两个继承体系建立链接,反而就是为了满足个性

组合,目的不是为了建立链接,而是为了统一行动,统一一套API

14)适配器VS中介者

适配器,解决兼容问题,可以用继承,也可以用组合

中介者,一定是组合,所有人可能都持有中介者引用

15)适配器VS策略

适配器,兼容

策略,把选择权交给用户

没有可比性

16)适配器VS桥接

桥接,不用继承建立联系

适配器,类适配器用的继承,对象适配器用的是组合,接口适配器实际上也是用的继承

17)桥接VS命令

桥接,需要也给中间的类,一定由功能实现

命令,需要一个抽象的中间类,只是为了规范

18)命令VS策略

命令,解耦请求和处理 [ 原本可以写在一起的 ],会有一个回调,会有反馈和处理结果

策略,固定好的选项,一定是同样的结果,一定要用户有参与

共同点,都有一个清单,给你啥就是啥

19)享元VS饿汉式单例

我们可以把对象池的容器设置为单例,同时,把对象池所在的类设置为单例的工厂

20)策略VS模板

有时候会混用,模板模式中可能设计的勾子方法,就是某一策略的实现

16. 设计模式总结与对比

原文:https://www.cnblogs.com/JustDoIt-1221/p/14620781.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!