单一职责模式之装饰器模式
装饰器模式
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式比生成子类更为灵活。
装饰器的优点
- 装饰类和被装饰类可以独立发展,而不会相互耦合。
- 装饰器模式是继承关系的一个替代方案。
- 装饰器模式可以动态地扩展一个实现类的功能。
装饰器的缺点
- 多层装饰是比较复杂的。
- 装饰器的使用场景。
- 需要扩展一个类的功能,或给一个类增加附加功能。
- 需要动态地给一个对象增加功能,这些功能可以在动态地撤销。
- 需要为一批类进行改装或加装功能。
装饰器模式是对继承的有力补充。单纯使用继承时,在一些情况下就会增加很多子类,而且灵活性差,维护不容易。装饰器模式可以替代继承,解决类膨胀的问题,如Java基础类库中的输入输出流相关的类大量的使用了装饰模式。
示例代码
- 汽车接口
public interface Car {// 车的装配public void show();
}
- 汽车实现类
public class Benz implements Car {@Overridepublic void show() {System.out.println("奔驰车的默认颜色是黑色");}
}
- 汽车装饰抽象类
public abstract class CarDecorator implements Car{private Car car = null;public CarDecorator(Car car){this.car = car;}@Overridepublic void show() {this.car.show();}
}
- 汽车装饰具体类
public class ConcreteCarDecorator extends CarDecorator {public ConcreteCarDecorator(Car car) {super(car);}// 给车彩绘private void print(){System.out.println("在车尾绘制新手字样,颜色是紫色霞光");}// 给车安装GPS设备private void setGps(){System.out.println("安装GPS定位导航系统");}// 重写show()方法public void show(){super.show();this.print();this.setGps();}
}
- 主逻辑
public class ClientDemo {public static void main(String[] args) {Car car = new Benz();// 对车进行装饰CarDecorator cd = new ConcreteCarDecorator(car);cd.show();}
}
关系类图
执行结果
单一职责模式之装饰器模式相关推荐
- 设计模式之门面模式与装饰器模式详解和应用
目录 1 门面模式定义 1.1 门面模式的应用场景 1.2 门面模式的通用写法 1.3 门面模式业务场景实例 1.4 门面模式在源码中的应用 1.5 门面模式的优缺点 2 装饰器模式 2.1 装饰器模 ...
- java模式之装饰器模式
定义: 装饰器模式也叫作包装器模式,只在不改变原有对象的基础上,动态的给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比生成子类更为灵活,属于结构型设计模式 装饰器模式提供了比继承更有弹性的 ...
- java外观设计修改_Java设计模式之外观模式和装饰器模式的设计(精选)
前言 本篇来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接 ...
- 面向对象程序设计(OOP设计模式)-结构型模式之装饰器模式的应用与实现
课程名称:程序设计方法学 实验4:OOP设计模式-结构型模式的应用与实现 时间:2015年11月18日星期三,第3.4节 地点:理1#208 一.实验目的 加深对结构型设计模式的理解以及在开发中的实际 ...
- 代理模式与装饰器模式有何区别?
本文有一些争议,谈论的是设计模式中的代理模式和装饰器模式的区别,但笔者是非常赞同文章的观点的,有种豁然开朗的感觉. 以下是原文 代理模式与装饰器模式有何区别? 我想有必要对此问题谈一下我的个人理解,若 ...
- Java设计模式之五 ----- 外观模式和装饰器模式
前言 在上一篇中我们学习了结构型模式的适配器模式和桥接模式.本篇则来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这 ...
- IOS设计模式之二(门面模式,装饰器模式)
本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...
- Java设计模式学习总结(11)——结构型模式之装饰器模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.这种模式创建了一个装饰类,用来包装原 ...
- 桥接模式和装饰器模式
桥接模式:将抽象和实现分离,使它们可以独立变化. 装饰器模式:在不改变现有对象结构的情况下,动态地给该对象增加一些职责.桥接模式桥接实现了两个不同的接口(抽象),作用也就与名字一样,只是为了桥接为另一 ...
最新文章
- linux进程间通信:FIFO应用 /var/log/ 系统日志的模拟实现
- 利用python爬虫与数据分析,打造最强玩法,轻松成为大神级玩家!
- LLC 逻辑链路控制
- 操作系统一:内核态的开销
- VC++ 实现文件与应用程序关联
- java指导手册,Java 注解指导手册 – 终极向导
- springboot初始化加载数据_Spring Boot配置数据加载大全
- 两张趣图助你理解状态码的含义~
- 【BZOJ3224】【codevs4543】【tyvj1728】普通平衡树,第一次的splay
- 【Less-9】基于SQLI的SQL时间盲注
- 在Cisco ASA 5510 上配置ssh登录
- 用“小红的下任男友是谁”通俗解释强化学习中的 基于模型方法 与 免模型方法
- Django外键关系:一对一、一对多,多对多
- chartControl生成时间轴动态曲线
- 影子卫士和影子系统哪个好用_win7和win10系统哪个好用
- IVS-163/167雷达距离测量的误差处理
- excel android版,Microsoft Excel手机版
- 织梦网站地图html制作,dedecms织梦制作xml网站地图的方法
- 游戲外挂,其實是一種網絡藝術
- checkinput php,使用php检查输入字段的类型