设计模式之间的关联关系和对比
单例模式和工厂模式
实际业务代码中,通常会把工厂类设计为单例。
策略模式和工厂模式
1、工厂模式包含工厂方法模式和抽象工厂模式是创建型模式,策略模式属于行为型模式。
2、工厂模式主要目的是封装好创建逻辑,策略模式接收工厂创建好的对象,从而实现不同的行为。
策略模式和委派模式
1、策略模式是委派模式内部的一种实现形式,策略模式关注的结果是否能相互替代。
2、委派模式更关注分发和调度的过程。
模板方法模式和工厂方法模式
工厂方法是模板方法的一种特殊实现。
对于工厂方法模式的create()方法而言,相当于只有一个步骤的模板方法模式。这一个步骤交给子类去实现。而模板方法呢,将needHomework()方法和checkHomework()方法交给子类实现,needHomework()方法和checkHomework()方法又属于父类的某一个步骤且不可变更。
模板方法模式和策略模式
1、模板方法和策略模式都有封装算法。
2、策略模式是使不同算法可以相互替换,且不影响客户端应用层的使用。
3、模板方法是针对定义一个算法的流程,将一些有细微差异的部分交给子类实现。
4、模板方法模式不能改变算法流程,策略模式可以改变算法流程且可替换。策略模式通常用来代替if...else...等条件分支语句。
1、WechatPay、JDPay、AliPay 是交给用户选择且相互替代解决方案。而JdbcTemplate下面的子类是不能相互代替的。
2、策略模式中的queryBalance()方法虽然在pay()方法中也有调用,但是这个逻辑只是出于程序健壮性考虑。用户完全可以自主调用queryBalance()方法。而模板方法模式中的mapRow()方法一定要在获得ResultSet 之后方可调用,否则没有意义。
装饰者模式和静态代理模式
1、装饰者模式关注点在于给对象动态添加方法,而代理更加注重控制对对象的访问。
2、代理模式通常会在代理类中创建被代理对象的实例,而装饰者模式通常把被装饰者作为构造参数。
装饰者和代理者虽然都持有对方引用,但逻辑处理重心是不一样的。
装饰者模式和适配器模式
1、装饰者模式和适配器模式都是属于包装器模式(Wrapper Pattern)。
2、装饰者模式可以实现被装饰者与相同的接口或者继承被装饰者作为它的子类,而适配器和被适配者可以实现不同的接口。
装饰者和适配器都是对SiginService 的包装和扩展,属于装饰器模式的实现形式。但是装饰者需要满足OOP 的is-a 关系,我们也讲过煎饼的例子,不管如何包装都有共同的父类。而适配器主要解决兼容问题,不一定要统一父类,上图中LoginAdapter 和RegistAdapter 就是兼容不同功能的两个类,但RegistForQQAdapter 需要注册后自动登录,因此既继承了RegistAdpter 又继承了LoginAdapter。
适配器模式和静态代理模式
适配器可以结合静态代理来实现,保存被适配对象的引用,但不是唯一的实现方式。
适配器模式和策略模式
在适配业务复杂的情况下,利用策略模式优化动态适配逻辑。
设计模式之间的关联关系和对比相关推荐
- Android Studio 选项菜单和动画结合_Android 应用与iOS 应用之间的设计差异对比!
同一个App,为什么iOS 和Android 的交互操作有那么大的区别?本文将用大量原生设计案例,为你一一说明它们为什么应该这样做,赶紧学起来! 了解并适当结合平台规范与优势,才能做到最佳的用户体验. ...
- 不同编程语言之间的具体实现对比
不同语言之间的具体实现对比 官网地址:https://programming-idioms.org/ 这个网站的核心存储部分代码是开源的,使用 Go 语言实现.源码地址: https://github ...
- R语言使用aov函数进行单因素协方差分析(One-way ANCOVA)、使用multcomp包的glht函数检验组均值之间所有成对对比差异、通过contrast参数自定义对比组进行组间两两方差分析
R语言使用aov函数进行单因素协方差分析(One-way ANCOVA).使用multcomp包的glht函数检验组均值之间所有成对对比差异.通过contrast参数自定义对比组进行组间两两方差分析( ...
- SAP WM 通过2-Step Picking创建的TO之间的关联关系
SAP WM 通过2-Step Picking创建的TO之间的关联关系 SAP WM模块里的2-Step Picking功能,会在Pick环节和Allocation环节创建TO单据来完成拣配事务.这些 ...
- 抽象工厂和工厂设计模式之间有什么区别?
我知道有很多关于这两种模式之间差异的帖子,但有一些我找不到的东西. 从我一直在阅读的内容中,我看到工厂方法模式允许您定义如何创建单个具体产品,但是从客户端隐藏实现,因为他们将看到通用产品. 我的第一个 ...
- IO设计模式:Reactor和Proactor对比
IO设计模式:Reactor和Proactor对比 平时接触的开源产品如Redis.ACE,事件模型都使用的Reactor模式:而同样做事件处理的Proactor,由于操作系统的原因,相关的开源产品也 ...
- 构架、框架、设计模式之间的关系简述
一.软件体系结构和框架的定义 软件体系结构的英文单词是"architecture". Architecture的基本词义是建筑.建筑学.建筑风格. 软件体系结构虽然根植于软件工程, ...
- java状态模式和策略模式_Java状态和策略设计模式之间的差异
java状态模式和策略模式 为了在Core Java应用程序中正确使用状态和策略设计模式,对于Java开发人员清楚地了解它们之间的区别很重要. 尽管状态和策略设计模式的结构相似,并且都基于开放式封闭设 ...
- Java状态和策略设计模式之间的差异
为了在Core Java应用程序中正确使用状态和策略设计模式,对于Java开发人员清楚地了解它们之间的区别很重要. 尽管状态和策略设计模式的结构相似,并且都基于开放式封闭设计原则,从SOLID设计原则 ...
最新文章
- 光耦p621引脚图_开关电源中光耦电路的设计与优点
- neo4j应用场景举例超过论文索引 公司投资风险 图书引用等场景的举例
- C++中的stack类、QT中的QStack类
- 微软正在改进 Windows 命令行:为 Linux 用户敞开大门
- [iOS]图片高清度太高, 导致内存过大Crash
- SAP成都研究院数字创新空间小伙伴们在2020 SAP上海DKOM
- python3 console input_Python3 tkinter基础 Button command 单击按钮 在console中打印文本
- 表单提交中get 和post方式的区别
- 防灾科技学院计算机组成原理,防灾科技学院计算机组成原理复习材料1
- 【Poj1017】Packets
- 【LeetCode笔记】169. 多数元素(Java、摩尔投票法、哈希表)
- 看美国如何实现农业大数据的建设
- Redis笔记(六)Redis的消息通知
- matlab 三维图像的绘制
- andriod 获取attrs_Android:具有attrs.xml中对象引用的Custom View,...
- 下载知乎视频并在线播放
- 微信语音麦克风静音_微信语音关闭麦克风对方知道吗
- vc2005和IE冲突 主要是在通过向导添加方法或变量的时候会报脚本错误。
- win10中Edge浏览器升级后崩溃 STATUS_INVALID_IMAGE_HASH
- Everything+Wox
热门文章
- spring+cxf
- 在 Ubuntu 环境下实现插入鼠标自动关闭触摸板
- sqlserver数据库事务
- 2016.2.29(异常)
- 3D数学读书笔记——3D中的方位与角位移
- Xml+Xslt测试工具
- 【转摘留用】页面静态化..
- SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间
- 【CLRS】《算法导论》读书笔记(一):堆排序(Heapsort)
- 如何下载一个物种的全部EST序列 | NCBI | 表达序列标签