装饰者模式---装饰者模式和桥接模式的区别
装饰者模式:
什么是装饰者模式:动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。
装饰者模式又称为包装模式,它主要是为了扩展对象的功能,包装类通过持有对象的引用(将对象传到包装类里面(聚合)),把对象包装起来,可以在调用对象的方法之前或者之后增加新的功能,以达到给对象添加一些额外的职责,就像为对象添加了一些装饰。
另一个要点是,包装者可以有很多个,对象被包装了一层之后,依然可以继续再包装来添加新的职责。添加职责的目的其实就是为了扩展对象的功能,通过使用装饰者模式可以使得系统具有非常好的弹性。遵循了面向对象原则:对扩展开放,对修改关闭。如果有新的需求变更,对象功能扩展,只需要新增一个装饰者类,将对象包装起来即可扩展对象的功能,而不需要对旧有对象代码进行修改。
装饰者类图:
装饰者模式和桥接模式的区别
1.定义
装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化。
桥接模式就是应用合成/聚合复用原则的模式,而装饰模式是使用继承方式的模式。所以区别之一就出来了,一个使用的是继承方式,另一个使用的却是合成方式。桥接模式耦合程度更低,两个(多个)维度的东西可以分别拥有自己的属性和方法;装饰者模式使用继承(实际也有聚合),必然有相同的属性和方法。
桥接模式是为了实现两个没有关联的维度的东西的自由组合,这里没有关联是指各自拥有自己的属性和方法,没有相同点(使用聚合或者组合)。装饰者模式使用了继承必然是两个种类具有相同的一些属性和方法,它不是为了实现两个维度的自由组合,是为了实现对对象的一层一层又一层包装,调用方法时,每一层包装递归的调用上一层的包装。
这里的包装可以举一个例子,如同月饼的包装,可以包一层,再包一层,再包一层,每一层的包装可以形同也可以不同。装饰者模式将月饼传入装饰类,每包一次就将上一次包好的月饼传入装饰类,进行下一次的包装。
2.角度不同
装饰模式是动态地添加一些额外功能的模式,也就是说装饰模式是适应新需求而添加新功能,并且不影响其他对象的一种模式;而桥接模式是适应变化维度的一种模式,它在于将对象的各个维度的变化都独立开来,使一些变化不受其他因素变化的影响。
3.“独立”不同
装饰模式中实现的是不同功能的子类进行封闭后独立的子类,但仍旧是紧耦合(因为是继承方式),而桥接模式中是将变化独立开,降低类之间的耦合度,尽最大可能实现松耦合(组合方式)。
4.适用性
装饰模式的适用性:
1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
2)处理那些可以撤消的职责。
3)当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
桥接模式的适用性:
1).如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
2).设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。
3).一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。
4).虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。
装饰者模式---装饰者模式和桥接模式的区别相关推荐
- VMware虚拟机三种网络模式详解--Bridged(桥接模式)
VMware虚拟机三种网络模式详解--Bridged(桥接模式) 简介: 由于Linux目前很热门,越来越多的人在学习Linux,但是买一台服务器放家里来学习,实在是很浪费. 那么如何解决这个问题?虚 ...
- VMWare三种工作模式详解,bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。
--------------------- 作者:CleverCode 来源:CSDN 原文:https://blog.csdn.net/CleverCode/article/details/4 ...
- 2021-08-03 VMware虚拟机三种网络模式详解 Bridged(桥接模式)
VMware虚拟机三种网络模式详解 Bridged(桥接模式) 参考连接:VMware虚拟机三种网络模式详解 Bridged(桥接模式)
- java 桥接模式_JAVA设计模式之【桥接模式】
桥接模式 蜡笔中颜色和型号之间存在耦合 毛笔中,颜色和型号解耦了 如果软件系统中某个类存在两个独立变化的维度,桥接模式可以将两个维度分离出来 角色 抽象类 扩充抽象类 实现类接口 提供基本操作 抽象类 ...
- 虚拟机(VMware Workstation)中,把连接网络的模式由“NAT模式”,改成“自动桥接模式”,网速大大的提升...
安装虚拟机,默认情况下,联网的模式是NAT,即跟主机是转发共用网络资源的,这样就非常慢,时常网页都打不开,现把它改成桥接模式,让它独立成为一台物理机,网速有大大的改善,设置操作如下: VM --> ...
- VMware虚拟机三种网络模式详解 Bridged(桥接模式)
原文地址:http://www.linuxidc.com/Linux/2016-09/135521.htm 由于Linux目前很热门,越来越多的人在学习Linux,但是买一台服务放家里来学习,实在是很 ...
- java桥接和装饰_设计模式:桥接模式和装饰模式
原标题:设计模式:桥接模式和装饰模式 一.桥接模式简介 1.基础描述 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是&qu ...
- 设计模式之结构型模式:适配器模式、桥接模式、组合模式、装饰器模式、代理模式、
文章目录 什么是结构型模式 适配模式 适配器的数据结构 适配器的实现 缺省适配器 适配器优缺点 适配器模式的使用环境 桥接模式 桥接模式数据结构 桥接模式的实现 桥接模式和适配器模式的联用 桥接模式的 ...
- php设计模式课程---9、桥接模式是什么
php设计模式课程---9.桥接模式是什么 一.总结 一句话总结: 一个类没干完,另外一个类接着给它干完 实质是类的拼接,也就是用类的组合代替了类的继承,因为类的组合可以有很多种方式,所以桥接就是类的 ...
- 设计模式GOF23之-------------------结构型模式(适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、享元模式)
一 结构型模式 二 适配器模式 下面我将用代码模拟键盘usb接口和ps/2的转接器 的适配器过程: 首先定义客户需求: package GOF23;public interface Target {v ...
最新文章
- 面试官要我写个shell,现在不让我离开,我是不是被录取了?
- 使用 Python 在 GitHub 上运行你的博客
- 车主无忧:为什么放弃开源Kafka?
- Base64编码 - Java加密与安全
- 光遇安卓服务器维护时间,光遇国服安卓和IOS什么时候互通?
- nfs linux系统服务,Linux系统服务搭建之NFS
- mysql 存储过程 set into_mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法...
- 西门子安装未找到ssf文件_V5.3安装时显示NO SSF FILE FOUND对话框,我该怎么解决啊? 谢谢!-工业支持中心-西门子中国...
- 安装python环境与运行_linux下怎么安装python的运行环境
- ubuntu 安装软件到一半被中断的解决办法
- [VB.NET]文件观察对象FileSystemWatcher
- Bootstrap3 的新特性
- 2019年上半年系统分析师上午真题及答案解析
- Python检查批量URL是否可以正常访问
- 英文版 《UNIX 网络编程.卷一 (UNIX Network Programming .volume1. 3rd edition)》(pdf)高清精校版下载
- linux中cron表达式指南
- 2D游戏新手引导点光源和类迷雾实现
- Ubuntu各类软件推荐
- invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix
- 小数转化为百分数(保留小数点后一位有效数字)