一、桥接模式

桥接模式必须由一方使用抽象类,持有使用接口的一方。

二、装饰者模式

从外观上看装饰者模式和桥接模式的类图只有一个地方不一样,就是最上边的接口和抽象类间的关系,装饰者模式是实现接口,桥接是以组合的方式持有接口。

三、两种模式的区别

桥接模式之所以能够解决类爆炸问题,就是因为相互直接接触的是接口和抽象类,其实每一个接口或者抽象类后背都可以看成是无数数目的不同类别的对象。于是各自拿出/删除对象就可以解决问题,如下图,就是想要哪两个货物结合,比如要A1、B1,那就直接通过商人交换就OK了,重点在于两个商人而不是他们的货物!!!

先看看我画的这张图:

现在B1想和A1结合,于是B1就去商人B(抽象类)那里拿到商人A的货物A1,因为商人B持有的是商人A(接口),所以他就拥有商人A的所有货物,然后商人B就把A1给到了B1。这里需要注意的是商人B只是持有商人AB可以使用A的一切,也可以选择不使用,并不是B就是A!但是如果B实现了A,那么B就是A,不管他想不想拥有这一切。这是区别于装饰者模式非常重要的一点。

装饰者模式则是,商人B实现了商人A,则你看到的商人AB和所有货物都属于同一个类型A,于是在某个方法可以传入的参数和返回值只要是A类型,那就可以通过该类型可以无限嵌套,任何一个和货物都可以和任何一个货物结合,包括自己,于是就实现了套娃。

最近刚学设计模式,有些不太对的地方欢迎指正,我迅速更改,避免误导

桥接模式和装饰者模式的区别及理解相关推荐

  1. 桥接模式和装饰者模式的区别

    桥接模式和装饰者模式的区别 桥接模式的角色 实现化角色 具体实现化角色 抽象化角色 具体抽象化角色 装饰者模式角色 抽象构件角色 具体抽象构件角色 抽象装饰角色 具体抽象装饰角色 桥接模式的类图 装饰 ...

  2. 图解Java设计模式学习笔记——结构型模式(适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式)

    一.适配器模式(类适配器.对象适配器.接口适配器) 1.现实生活中的例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了国内的电器了. 2.基本介绍 适配器模式(Ad ...

  3. 设计模式之门面模式与装饰器模式详解和应用

    目录 1 门面模式定义 1.1 门面模式的应用场景 1.2 门面模式的通用写法 1.3 门面模式业务场景实例 1.4 门面模式在源码中的应用 1.5 门面模式的优缺点 2 装饰器模式 2.1 装饰器模 ...

  4. java模式之装饰器模式

    定义: 装饰器模式也叫作包装器模式,只在不改变原有对象的基础上,动态的给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比生成子类更为灵活,属于结构型设计模式 装饰器模式提供了比继承更有弹性的 ...

  5. 代理模式与装饰器模式有何区别?

    本文有一些争议,谈论的是设计模式中的代理模式和装饰器模式的区别,但笔者是非常赞同文章的观点的,有种豁然开朗的感觉. 以下是原文 代理模式与装饰器模式有何区别? 我想有必要对此问题谈一下我的个人理解,若 ...

  6. Java设计模式之五 ----- 外观模式和装饰器模式

    前言 在上一篇中我们学习了结构型模式的适配器模式和桥接模式.本篇则来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这 ...

  7. java外观设计修改_Java设计模式之外观模式和装饰器模式的设计(精选)

    前言 本篇来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接 ...

  8. 代理模式和装饰者模式

    简介 代理模式和装饰者模式是两种常见的设计模式.代理模式是为其它对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到 ...

  9. 策略模式、工厂模式、装饰者模式总结解析

    今天在面试的时候被问到自己策略模式怎么用的时候有被问懵到,以至于明明是自己的代码在脑海里已经混乱了,而且面试官提出的还是没有更好的利用设计模式也让我思考了一下我之前的代码到底是怎么实现的,重新梳理下策 ...

最新文章

  1. c# 无法打开计算机.上的 服务,c# - C#Winform应用程序无法在其他计算机上运行(神秘的启动时) - 堆栈内存溢出...
  2. Entity framewrok (linq to entity)查询优化的一点摸索
  3. 算法题001 剑指Offer 面试题三:二维数组中的查找
  4. ECharts - 饼状图隐藏标示线和标示文字
  5. Java设计模式之七大结构型模式
  6. 【Jmeter篇】Jmeter分布式调度压测部署
  7. favicon ico什么意思_你真的知道IPFS与Filecoin是什么吗?
  8. 勤于思考:Asp.Net MVC Html.TextBoxFor日期格式化
  9. oracle中的自增关键字,Oracle中设置自增字段
  10. 父与子一起学python_父与子的编程之旅:与小卡特一起学Python 中文pdf版[22MB]
  11. Ubuntu Apt 如何使用清华源
  12. 姓杜起名:杜姓高雅霸气的男孩名字
  13. 基于jeecgboot的flowable流程增加节点表单的支持(二)
  14. matlab怎样灰度变换,matlab灰度变换函数
  15. 22万抢注“活动”双拼域名,95后创业者却因困意失之交臂
  16. c语言泰勒公式求ln,ln(1-x)的泰勒级数展开是什么?
  17. 二进制转换八进制图解_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...
  18. 11.投资管理流程与投资者需求
  19. IDM 下载器 使用记录
  20. 为何Excel表格部分选项是灰色的,无法选择?

热门文章

  1. LTE-UMTS长期演进与实践学习(1)——LTE基本架构
  2. hdu 1907 & hdu 2509(Nim博弈)
  3. 用Python做一个猜数游戏(入门)
  4. ionic中的slide-box
  5. 开源分享 | java项目 | 亲戚计算器
  6. Linux解压缩解压tar.gz文件
  7. 计算机一级试题怎么保存上网,计算机一级试题中上网部分怎么保存文件
  8. 优酷路由器刷openwrt固件一
  9. 十六进制颜色值 (美观必备 - 设置颜色)
  10. 2020年中国各省GDP简析