装饰器模式

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式比生成子类更为灵活。

装饰器的优点

  • 装饰类和被装饰类可以独立发展,而不会相互耦合。
  • 装饰器模式是继承关系的一个替代方案。
  • 装饰器模式可以动态地扩展一个实现类的功能。

装饰器的缺点

  • 多层装饰是比较复杂的。
  • 装饰器的使用场景。
  • 需要扩展一个类的功能,或给一个类增加附加功能。
  • 需要动态地给一个对象增加功能,这些功能可以在动态地撤销。
  • 需要为一批类进行改装或加装功能。

装饰器模式是对继承的有力补充。单纯使用继承时,在一些情况下就会增加很多子类,而且灵活性差,维护不容易。装饰器模式可以替代继承,解决类膨胀的问题,如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 门面模式的应用场景 1.2 门面模式的通用写法 1.3 门面模式业务场景实例 1.4 门面模式在源码中的应用 1.5 门面模式的优缺点 2 装饰器模式 2.1 装饰器模 ...

  2. java模式之装饰器模式

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

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

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

  4. 面向对象程序设计(OOP设计模式)-结构型模式之装饰器模式的应用与实现

    课程名称:程序设计方法学 实验4:OOP设计模式-结构型模式的应用与实现 时间:2015年11月18日星期三,第3.4节 地点:理1#208 一.实验目的 加深对结构型设计模式的理解以及在开发中的实际 ...

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

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

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

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

  7. IOS设计模式之二(门面模式,装饰器模式)

    本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...

  8. Java设计模式学习总结(11)——结构型模式之装饰器模式

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.这种模式创建了一个装饰类,用来包装原 ...

  9. 桥接模式和装饰器模式

    桥接模式:将抽象和实现分离,使它们可以独立变化. 装饰器模式:在不改变现有对象结构的情况下,动态地给该对象增加一些职责.桥接模式桥接实现了两个不同的接口(抽象),作用也就与名字一样,只是为了桥接为另一 ...

最新文章

  1. linux进程间通信:FIFO应用 /var/log/ 系统日志的模拟实现
  2. 利用python爬虫与数据分析,打造最强玩法,轻松成为大神级玩家!
  3. LLC 逻辑链路控制
  4. 操作系统一:内核态的开销
  5. VC++ 实现文件与应用程序关联
  6. java指导手册,Java 注解指导手册 – 终极向导
  7. springboot初始化加载数据_Spring Boot配置数据加载大全
  8. 两张趣图助你理解状态码的含义~
  9. 【BZOJ3224】【codevs4543】【tyvj1728】普通平衡树,第一次的splay
  10. 【Less-9】基于SQLI的SQL时间盲注
  11. 在Cisco ASA 5510 上配置ssh登录
  12. 用“小红的下任男友是谁”通俗解释强化学习中的 基于模型方法 与 免模型方法
  13. Django外键关系:一对一、一对多,多对多
  14. chartControl生成时间轴动态曲线
  15. 影子卫士和影子系统哪个好用_win7和win10系统哪个好用
  16. IVS-163/167雷达距离测量的误差处理
  17. excel android版,Microsoft Excel手机版
  18. 织梦网站地图html制作,dedecms织梦制作xml网站地图的方法
  19. 游戲外挂,其實是一種網絡藝術
  20. checkinput php,使用php检查输入字段的类型

热门文章

  1. 挺难过的,测完后发现自已有点色盲--色盲、色弱测试图
  2. Ubuntu 16.0 LAMP 配置
  3. 连接远程linux服务器
  4. 机器学习21:Ensemble
  5. 北理工计算机学院梁玮,梁玮 - 北京理工大学 - 计算机学院
  6. ajax省市线三级联动
  7. 安鑫 一个普通女孩的奋斗史
  8. python中的函数def
  9. WindowsAPI详解——TerminateProcess 终止|杀死其它进程
  10. 魅族 m57a 能刷android 吗,处理器升级 魅族新手机M57A亮相