欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


欢迎跳转到本文的原文链接:https://honeypps.com/design_pattern/difference-of-patterns/

##建造者模式、抽象工厂模式、工厂模式的区别
建造者模式和抽象工厂模式
与抽象工厂模式相比,建造者模式返回一个组装好的完整产品,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品登记结构,构成了一个产品族。

在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,而在建造者模式中,客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤,它侧重于一步步构造一个复杂对象,返回一个完整对象。

如果将抽象工厂模式看成汽车配件生产工厂,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂,通过对部件的组装可以返回一辆完整的汽车。

在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的构造过程。工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类想客户端提供最终的产品。而在建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给指导者,由指导者负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。

工厂方法模式和抽象工厂模式
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。每个具体工厂类智能创建一个具体产品类的实例。

抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品的实例。

区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。


##策略模式和工厂模式的区别
工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;而策略模式是行为型的,它接受已经创建好的实例,实现不同的行为。


##装饰模式、代理模式、外观模式、适配器模式的区别
概念
适配器模式:一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

装饰器模式:原有的不能满足现有的需求,对原有的进行增强。

代理模式:同一个类而去调用另一个类的方法,不对这个方法进行直接操作

外观模式:我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。

区别
代理模式是与原对象实现同一个接口,必须要实现原接口和持有真实的对象,才能称之为代理类。代理模式一定是自身持有这个对象,不需要从外部传入。用代理模式,代理类可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。

装饰模式的一定是从外部传入,并且可以没有顺序,按照代码的实际需求随意挑换顺序。当我们使用装饰器模式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。

适配器类则是匹配新接口,从代码上的特点来说,适配类持有新的目标对象(对象适配器)。

代理模式注重的是隔离限制,关注于控制对对象的访问,让外部不能访问你实际的调用对象,比如权限控制。代理和真实对象之间的的关系通常在编译时就已经确定了。

装饰模式注重的是功能的拓展,关注于在一个对象上动态的添加方法,在同一个方法下实现更多的功能。装饰者能够在运行时递归地被构造。

适配器模式注重的是接口的兼容。

外观模式注重的是多个类的集成、统一适配。


##装饰模式和代理模式的区别
装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。


##外观模式和代理模式的区别
代理与外观的主要区别在于,代理对象代表一个单一对象而外观对象代表一个子系统,代理的客户对象无法直接访问对象,由代理提供单独的目标对象的访问,而通常外观对象提供对子系统各元件功能的简化的共同层次的调用接口。代理是一种原来对象的代表,其他需要与这个对象打交道的操作都是和这个代表交涉的。


##外观模式和适配器模式的区别
外观与适配器都是对现存系统的封装。外观定义的新的接口,而适配器则是复用一个原有的接口,适配器是使两个已有的接口协同工作,而外观则是为现存系统提供一个更为方便的访问接口。如果硬要说外观是适配,那么适配器有用来适配对象的,而外观是用来适配整个子系统的。也就是说,外观所针对的对象的粒度更大。


##适配器模式和代理模式的区别
适配器模式改变所考虑的对象的接口,代理模式不能改变所代理对象的接口。


持续更新中~~~


参考资料
1.《装饰模式、装饰器模式、代理模式、外观模式区别》

欢迎跳转到本文的原文链接:https://honeypps.com/design_pattern/difference-of-patterns/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


设计模式:各个模式间的对比相关推荐

  1. golang设计模式介绍(内含各个模式的java对比)代码解读

    golang设计模式介绍 设计模式是面向对象软件的经验,是通常设计问题的解决方案,每一种设计模式系统的命名,解释和评价了面向对象中一个重要的和重复出现的设计. 以下一一介绍这些设计模式 1.1工厂设计 ...

  2. IO设计模式:Reactor和Proactor对比

    IO设计模式:Reactor和Proactor对比 平时接触的开源产品如Redis.ACE,事件模型都使用的Reactor模式:而同样做事件处理的Proactor,由于操作系统的原因,相关的开源产品也 ...

  3. 设计模式-创建者模式篇

    设计模式 目录: 一.单例模式 二.工厂模式 三.抽象工厂模式 四.原型模式 五.建造者模式 注:学习视频:黑马程序员Java设计模式 创建者模式 创建型模式的主要关注点是"怎样创建对象?& ...

  4. PHP设计模式-工厂模式

    PHP设计模式-工厂模式 一.工厂模式概念 工厂模式,顾名思义,像工厂的流水线,固定的规格,固定的材料,做固定的事情. 工厂模式分为三种:简单工厂.工厂方法.抽象工厂 ,三种工厂的区别是,抽象工厂由多 ...

  5. 设计模式-Decorator模式

    目录 一个例子(贪玩蓝月) 传统继承实现 装饰器模式实现 对比 总结 Decorator(装饰器)模式属于结构型模式. 比如当其需要三种不同的附加特性,可以为其创建三个派生类.但是若它还需要同时具有其 ...

  6. Java 设计模式——状态模式

    概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...

  7. 【学习笔记】ABAP OOD设计模式 - 桥接模式

    ABAP OOD设计模式 - 桥接模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 桥接模式又称为桥梁模式,在程序开发中,采用不同的维度分解一系列对象,然后采用组 ...

  8. 软件设计模式—命令模式

    前篇--软件设计模式-基础 前篇--软件设计模式-三种工厂模式 前篇--软件设计模式-装饰者模式 前篇--软件设计模式-单例模式 前篇--软件设计模式-原型模式 命令模式是对象行为型模式 目录 1. ...

  9. JavaScript设计模式系列—模式篇总结(上)

    转载请注明预见才能遇见的博客:http://my.csdn.net/ 原文地址:https://blog.csdn.net/pcaxb/article/details/102517956 JavaSc ...

最新文章

  1. C++——auto、decltype、返回类型后置、模板别名:using =、nullptr
  2. 【运筹学】整数规划 ( 整数规划示例 | 整数规划解决的核心问题 )
  3. 基于.NET平台常用的框架整理(转)
  4. 麦格纳软件公司绩效考核信息化管理解决方案
  5. Linux中常用的查找文件的命令
  6. 并发环境下,先操作数据库还是先操作缓存?
  7. ESG里程碑:发布第100份实验室报告
  8. Python进阶:如何将字符串常量转化为变量?
  9. AJAX跨域问题解决方法(1)——禁止浏览器进行跨域限制
  10. H3C交换机设置DHCP中继,配合Linux 服务器为多VLAN提供DHCP地址分配服务
  11. ngnix 作用(通俗易懂)【转载】
  12. android 截屏_图文小编福利:Apowersoft专业截屏王
  13. 于谦加盟高德地图 推出“哪儿都熟”相声导航
  14. 牛客JS编程大题(一)
  15. 数学建模常用模型、特点以及应用场景
  16. Win10 分页缓冲池 过大
  17. 头歌-自己动手画CPU(第五关)-寄存器文件设计-Logisim
  18. 如何使用networkx导入txt文件数据并绘制
  19. 网关Gateway的介绍与使用
  20. 【数据竞赛】风控实操案例 | 基于Xgboost与Catboost实现非法集资企业识别

热门文章

  1. mysql设置字段为空字符串_mysql数据类型字段插入空字符串自动填充为0报错
  2. 应用指定显示到副屏_LED灯杆屏广泛应用逐渐成为智慧城市信息化的重要窗口
  3. linux中ps aux和ps -ef下显示的意义
  4. Java并发-Fork/Join框架
  5. Exchange与ADFS单点登录 PART 6:Exchange声明规则配置
  6. 惠普大佬:未来30年四大趋势将推动科技产业发展
  7. SQLserver删除某数据库中所有表 方法 二
  8. 关于相对布局RelativeLayout的各种属性介绍
  9. everyday words
  10. 牛客 - Elo mountains(AC自动机+可持久化数组优化)