为什么80%的码农都做不了架构师?>>>   

定义:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

特点:

(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。

(2) 装饰对象包含一个真实对象的引用(reference)

(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。

(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。

企业级开发和常用框架中的应用:IO流底层架构

组成:

(1)抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
  (2)具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
  (3)装饰(Decorator)角色:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。
  (4)具体装饰(Concrete Decorator)角色:负责给构件对象添加上附加的责任。

具体实例:

/***   以下装饰房子举例*/
public class Demo {public static void main(String[] args) {GenericHouse house = new GenericHouse();Garage garage = new Garage(house);garage.doSomething();Kitchen kitchen = new Kitchen(house);kitchen.doSomething();}
}/***   抽象构件角色:一个接口,用以规范具体装饰的位置 */
interface AbstractHouse{public void doSomething();
}/***   装饰角色: 持有要装饰的对象*/
class Master implements AbstractHouse{private AbstractHouse abstractHouse;public Master(AbstractHouse abstractHouse) {this.abstractHouse = abstractHouse;}public void doSomething() {System.out.println("装饰角色:装饰角色持有者,在这儿就是房子的主人");abstractHouse.doSomething();}}/***  具体的构件角色:具体需要被装饰的对象 */
class GenericHouse implements AbstractHouse{public void doSomething() {System.out.println("具体构建角色:房子可以住人,遮风挡雨!");}
}/***   具体装饰角色: 具体的装饰就是在这儿做的,它继承自装饰角色,因为装饰角色持有被装饰对象,*   所以它也就持有了被装饰对象,可以做装饰*/
class Garage extends Master{public Garage(AbstractHouse abstractHouse) {super(abstractHouse);}public void doSomething() {super.doSomething();System.out.println("具体装饰角色:在这儿做装饰的事儿,把房子中的一间装饰成车库,所以房子可以存放车子了");}
}
/***    具体装饰角色: 具体的装饰就是在这儿做的,它继承自装饰角色,因为装饰角色持有被装饰对象,*   所以它也就持有了被装饰对象,可以做装饰*/
class Kitchen extends Master{public Kitchen(AbstractHouse abstractHouse) {super(abstractHouse);}public void doSomething() {super.doSomething();System.out.println("具体装饰角色:在这儿做装饰的事儿,把房子中的一间装饰成厨房,所以房子可以做饭了");}
}

在实际开发中,装饰着模式的包装作用有很大的作用,我们可以在不改变原来对象的情况下,对对象做一些其他的操作,这样可以避免我们改造对象,但同时我们又可以很好的完成一些操作。

转载于:https://my.oschina.net/jiaoy/blog/742748

java设计模式之装饰者模式相关推荐

  1. Java设计模式(装饰者模式-组合模式-外观模式-享元模式)

    Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...

  2. Java 设计模式之装饰者模式

    一.了解装饰者模式 1.1 什么是装饰者模式 装饰者模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰者来包裹真实的对象. 所以装饰者可以动 ...

  3. Java设计模式之三--装饰者模式

    转载出处:http://blog.csdn.NET/lmj623565791/article/details/24269409 今天继续设计模式之旅,给大家带来装饰者模式,国际惯例,先看定义. 装饰者 ...

  4. (设计模式七)java设计模式之装饰器模式

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

  5. java设计模式之 装饰器模式

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

  6. java设计模式之装饰器模式

    一.装饰器模式简介 装饰器模式可以动态给一个对象添加一些额外的职责,同时又不改变其结构.就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活.这种模式创建了一个装饰 ...

  7. Java 设计模式之装饰器模式

    装饰器模式用于给原有对象增加新功能的场景, 拿食物冰淇淋,香草巧克力作为例子,给冰淇淋加香草,或者加巧克力,或者加香草和巧克力. 首先定义一个食物接口: /*** 装饰类和被装饰类共同继承的抽象类* ...

  8. java与模式孙悟空_由孙悟空的七十二变看Java设计模式:装饰者模式

    应用场景 京东.天猫双十一,情人节商品大促销,各种商品有不同的促销活动 满减:满200减50 每满减:每满100减10 打折:买两件8折,三件7折 数量减:满三件减去最低价的一件 假设现在顾客买了两件 ...

  9. java设计模式之装饰器模式(包装器模式)

    显然设计模式往往追求开闭原则,所以往往是面向接口编程,那么万事万物就是先写接口,把需求弄出来,这里以一辆车子在陆地上跑为基础,对它进行装饰,使它可以具备更多的"功能",达到装饰的效 ...

最新文章

  1. MYSQL 数据库迁移 ***
  2. 马斯克躺枪得州最严堕胎法案,因拒绝表态遭炮轰!“不站女权就抵制特斯拉”...
  3. 防火墙双机热备三大协议(VRRP-VGMP-HRP)原理
  4. 单链表的基本操作_数据结构-单链表的基本操作
  5. C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符
  6. 高并发測试工具webbench
  7. 多媒体计算机探索 教案,多媒体的教学设计
  8. 9宫格 java_java 拼接头像9宫格
  9. SQL Server 数据库角色简介
  10. 使用U盘引导安装linux
  11. 操作系统课程设计任务书
  12. 数据库查询之对含有数字和字母的字段进行排序
  13. 京都计算机学院放假时间表,2018年官方放假安排时间一览表
  14. 除了谷歌,这些互联网公司的办公室设计也十分酷炫
  15. Firefox OS开发指南
  16. vbox虚拟机上装了银行的网络认证软件后不能正常使用的问题
  17. 荷兰DELTA电源维修SM66-AR-110德尔塔电源
  18. C语言习题答案【7】(仅参考)
  19. 我国最具影响力的25座大中城市每平方米平均房价
  20. C#,数值计算,矩阵的乔莱斯基分解(Cholesky decomposition)算法与源代码

热门文章

  1. DM 源码阅读系列文章(四)dump/load 全量同步的实现
  2. LVS-DR模型实现调度
  3. 记一次DRBD Unknown故障处理过程
  4. Spark学习之Spark Streaming(9)
  5. MyEclipse用(JDBC)连接SQL出现的问题~
  6. Ruby on rails Mac开发 入门笔记(一)
  7. [转]Windows 性能监视器工具-perfmon
  8. 102.如何减轻缓存失效时上游服务的压力
  9. c语言模拟计算机程序阶乘,辽宁省计算机二级(C语言)模拟试卷B(无答案).doc
  10. 【免费毕设】PHP校园二手信息网站的设计与开发(源代码+论文)