所有的说明和解释都在代码中有注释来标明

package mode.decorator;/*** * 这里定义一个接口,在接口中定义我们要执行的操作。* * 以后所有的装饰器以及我们要装饰的对象都要实现这个接口。有了这样的大前提,我们就可以其用 Sourcable来定义我们的装饰器和要装饰的对象了* * */
public interface Sourcable {public void operation();
}
package mode.decorator;/*** * 所有的装饰器都要实现Sourcable接口,并且要有Sourcable接口的属性以及以Sourcable接口为参数的构造方法* * 在operation中调用传入的Sourcable参数对应的operation方法,当然要加入一些装饰器自己的代码,这些代码就是装饰* * */
public class Decorator1 implements Sourcable {private Sourcable sourcable;public Decorator1(Sourcable sourcable) {super();this.sourcable = sourcable;}@Overridepublic void operation() {System.out.println("第一个装饰器前");this.sourcable.operation();System.out.println("第一个装饰器后");}}
package mode.decorator;/*** * 所有的装饰器都要实现Sourcable接口,并且要有Sourcable接口的属性以及以Sourcable接口为参数的构造方法* * 在operation中调用传入的Sourcable参数对应的operation方法,当然要加入一些装饰器自己的代码,这些代码就是装饰* * */
public class Decorator2 implements Sourcable {private Sourcable sourcable;public Decorator2(Sourcable sourcable) {super();this.sourcable = sourcable;}@Overridepublic void operation() {System.out.println("第二个装饰器前");sourcable.operation();System.out.println("第二个装饰器后");}}
package mode.decorator;/*** * 所有的装饰器都要实现Sourcable接口,并且要有Sourcable接口的属性以及以Sourcable接口为参数的构造方法* * 在operation中调用传入的Sourcable参数对应的operation方法,当然要加入一些装饰器自己的代码,这些代码就是装饰* * */
public class Decorator3 implements Sourcable {private Sourcable sourcable;public Decorator3(Sourcable sourcable) {super();this.sourcable = sourcable;}public void operation() {System.out.println("第三个装饰器前");sourcable.operation();System.out.println("第三个装饰器后");}
}
package mode.decorator;/*** * 最后是要被装饰的对象,直接实现Sourcable接口就行,并且在operation中实现自己的代码* * */
public class Source implements Sourcable {@Overridepublic void operation() {System.out.println("原始类的方法");}}

测试

package mode.decorator;public class Test {public static void main(String[] args) {Sourcable source = new Source();// 装饰类对象Sourcable obj = new Decorator1(new Decorator2(new Decorator3(source)));obj.operation();}
}

装饰器模式 decorator相关推荐

  1. decorator java_装饰器模式-Decorator(Java实现)

    装饰器模式-Decorator(Java实现) 装饰器模式允许向一个现有的对象添加新的功能, 同时又不改变其结构. 其中 "现有对象"在本文中是StringDisplay类. 添加 ...

  2. c语言装饰,C/C++知识点之装饰器模式(Decorator) C++

    本文主要向大家介绍了 C/C++知识点之装饰器模式(Decorator) C++,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助.装饰器模式是比较常用的一种设计模式,Python中就 ...

  3. python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

  4. python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

  5. 【Java设计模式系列】装饰器模式(Decorator Pattern)

    简介 一般有两种方式可以给一个类或对象新增行为: 继承 子类在拥有自身方法同时还拥有父类方法.但这种是静态的,用户无法控制增加行为的方式和时机. 关联 将一个类的对象嵌入另一个对象,由另一个对象决定是 ...

  6. 装饰器模式--Decorator

    装饰器模式 定义: 装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将一些新的功能动态的添加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模 ...

  7. 装饰器模式(Decorator)

    一.装饰者模式的定义: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 结构: 装饰器UML.png (1)抽象构件( ...

  8. 极速理解设计模式系列:23.装饰器模式(Decorator Pattern)

    五个角色:部件(Component).具体部件(ConcreteComponent).装饰抽象类(Decorator).具体装饰对象(ConcreteDecorator).客户端(Client) 部件 ...

  9. JAVA设计模式-装饰器模式(Decorator)

    装饰器模式(Decorator) 为了某个实现类在不修改原始类的基础上进行动态地覆盖或者增加方法 采用--------装饰器模式 实现类要保持与原有类的层级关系 装饰器模式是一种特殊的适配器模式 拿适 ...

最新文章

  1. Java中的责任链模式
  2. Final Cut Pro X剪辑影片基本步骤
  3. 协议转换器的特点有哪些?
  4. 异或运算交换两个整数
  5. 抓包工具-charles安装过程
  6. Hive Hooks介绍
  7. java用户邮件激活
  8. 情人节限定,cmd批处理浪漫表白
  9. 湖仓一体在金融科技行业的实践
  10. 核定征收的个体户,年营业额不超过120万,还需要缴纳个税吗?
  11. 1068 万绿丛中一点红 (20 分)测试点3、5
  12. 静态HTML网页设计作品 仿唯品会购物商城(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 商城网站设计
  13. Linux的numactl
  14. 九龙证券|近50亿资金抢筹券商龙头,知名游资杀入热门互联网股
  15. 解决HTML、PHP乱码问题
  16. 什么是FPGA工程师的核心竞争力
  17. uni-app开发多端之钉钉小程序
  18. 汽轮机振动的日平均峰峰值的BP神经网络预测matlab仿真
  19. 盲源分离matlab程序,盲源分离matlab程序
  20. 智能门锁:NFC刷卡

热门文章

  1. python 如何匹配列表中某个单词_Python中部分指定单词的最佳匹配项
  2. 判断html()中有长度,VBS 字符串长度判断的问题
  3. .net md5 java 偏移量_C# java MD5加密方不一致问题
  4. mysql树节点路径,关于mysql:从使用物化路径编码树的表中选择,按深度优先排序(无递归/ ltree)...
  5. linux命令行如何上翻,Linux学习教程-获取可用命令行参数 or 文件上下翻转和左右翻转...
  6. Redis的基础事务
  7. C语言const的用法详解
  8. 北京化工大学通信工程linux,北京化工大学通信工程专业解读
  9. mysql innodb表移植_mysql Innodb引擎独立表空间下通过复制.ibd文件快速迁移数据文件...
  10. 【OpenCV 例程200篇】46. 直方图均衡化