装饰者模式 java代码小示例

转载 2011年04月08日 20:07:00

1、定义及作用

该模式以对客户端透明的方式扩展对象的功能。

2、涉及角色

抽象构件角色:定义一个抽象接口,来规范准备附加功能的类。

具体构件角色:将要被附加功能的类,实现抽象构件角色接口。

抽象装饰者角色:持有对具体构件角色的引用并定义与抽象构件角色一致的接口。

具体装饰角色:实现抽象装饰者角色,负责为具体构件添加额外功能。

3、简单实现

抽象构件角色java 代码
  1. package decorator;   
  2. /**  
  3.  * 装饰者和原组建的共同方法接口(抽象构件角色)  
  4.  * @author mouca.he  
  5.  *  
  6.  */  
  7. public interface InterfaceComponent {   
  8.   
  9.     /**  
  10.      * 组件方法 say()  
  11.      *  
  12.      */  
  13.     public void say();   
  14. }   

具体构件角色java 代码

  1. package decorator;   
  2. /**  
  3.  * 原组件(具体构件角色)  
  4.  * @author mouca.he  
  5.  *  
  6.  */  
  7. public class Component implements InterfaceComponent{   
  8.   
  9.     public void say() {   
  10.         // TODO 自动生成方法存根   
  11.         System.out.println("Component.say():原组件的方法!");   
  12.     }   
  13.   
  14. }   

抽象装饰者角色java 代码

  1. package decorator;   
  2. /**  
  3.  * 抽象装饰者  
  4.  * @author mouca.he  
  5.  *  
  6.  */  
  7. public abstract class AbstractDecorator implements InterfaceComponent{   
  8.   
  9.     private InterfaceComponent component;   
  10.        
  11.     public AbstractDecorator(InterfaceComponent component){   
  12.         this.component = component;   
  13.     }   
  14.     /**  
  15.      * 组件方法执行前预处理方法  
  16.      *  
  17.      */  
  18.     protected void preSay(){};   
  19.        
  20.     /**  
  21.      * 组件方法执行后处理方法  
  22.      *  
  23.      */  
  24.     protected void afterSay(){};   
  25.        
  26.     public void say(){   
  27.            
  28.         preSay();   
  29.         component.say();   
  30.         afterSay();   
  31.            
  32.     };   
  33. }   

具体装饰者二java 代码

  1. package decorator;   
  2. /**  
  3.  * 装饰者二  
  4.  * @author mouca.he  
  5.  *  
  6.  */  
  7. public class DecoratorTwo extends AbstractDecorator{   
  8.   
  9.     public DecoratorTwo(InterfaceComponent component) {   
  10.         super(component);   
  11.         // TODO 自动生成构造函数存根   
  12.     }   
  13.   
  14.     /**  
  15.      * 根据需要重载模板类preSay()方法  
  16.      */  
  17.     protected void preSay(){   
  18.         System.out.println("DecoratorTwo.preSay():装饰者二的preSay()方法!");   
  19.     }   
  20.        
  21.     /**  
  22.      * 根据需要重载模板类afterSay()方法  
  23.      */  
  24.     protected void afterSay(){   
  25.         System.out.println("DecoratorTwo.afterSay():装饰者二的afterSay()方法!");   
  26.     }   
  27.   
  28. }   

装饰者一java 代码

  1. package decorator;   
  2. /**  
  3.  * 装饰者一  
  4.  * @author mouca.he  
  5.  *  
  6.  */  
  7. public class DecoratorOne extends AbstractDecorator{   
  8.   
  9.     public DecoratorOne(InterfaceComponent component) {   
  10.         super(component);   
  11.         // TODO 自动生成构造函数存根   
  12.     }   
  13.     /**  
  14.      * 根据需要重载模板类preSay()方法  
  15.      */  
  16.     protected void preSay(){   
  17.         System.out.println("DecoratorOne.preSay():装饰者一的preSay()方法!");   
  18.     }   
  19.        
  20.     /**  
  21.      * 根据需要重载模板类afterSay()方法  
  22.      */  
  23.     protected void afterSay(){   
  24.         System.out.println("DecoratorOne.afterSay():装饰者一的afterSay()方法!");   
  25.     }   
  26.     /**  
  27.      * 测试方法  
  28.      * @param args  
  29.      */  
  30.     public static void main(String[] args) {   
  31.         // TODO 自动生成方法存根   
  32.         InterfaceComponent interfaceComponent = new DecoratorTwo(new DecoratorOne(new Component()));   
  33.         interfaceComponent.say();   
  34.         /*  
  35.          * 控制台输出:  
  36.          * DecoratorTwo.preSay():装饰者二的preSay()方法!  
  37.          * DecoratorOne.preSay():装饰者一的preSay()方法!  
  38.          * Component.say():原组件的方法!  
  39.          * DecoratorOne.afterSay():装饰者一的afterSay()方法!  
  40.          * DecoratorTwo.afterSay():装饰者二的afterSay()方法!  
  41.          */  
  42.     }   
  43. }   

JAVA设计模式初探之装饰者模式

这个模式花费了挺长时间,开始有点难理解,其实就是 定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。 设计初衷:通常...
  • jason0539
  • jason0539
  • 2014年04月01日 09:07
  • 76500

简单Java代码实例助你通俗易懂的理解什么是装饰(者)设计模式 (Decorator)

首先抛开到处都有的文字概念。来看下面的例子。 现在以:人吃饭。这个需求为例。来讲解这个设计模式。 1.0:想当年,人们都比较朴实。吃饭就是简简单单的吃饭。 那么PersonBefore类里面一个简单的...
  • qq_27093465
  • qq_27093465
  • 2016年11月24日 15:34
  • 1019

学习、探究Java设计模式——装饰者模式

定义装饰者模式:在不改变原类文件以及不使用继承的情况下,动态地将责任附加到对象上,从而实现动态拓展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。设计原则要使用装饰者模式,需要满...
  • a553181867
  • a553181867
  • 2016年08月03日 22:52
  • 4406

java装饰者模式

装饰者模式:给一个对象增加一些新的功能,而且要求是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。 假如我们想对房子进行装饰,首先得有一个House接口,里面有装饰的方法...
  • uk8692
  • uk8692
  • 2015年05月09日 23:37
  • 590

Java 设计模式之 -- 装饰者模式

对于装饰模式我们先看官方的介绍 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。由于java的封装继承多态三个特性使得我们充...
  • AndroidFlying007
  • AndroidFlying007
  • 2016年09月27日 15:38
  • 259

设计模式的装饰者模式的例子

  • 2011年12月21日 10:58
  • 3KB
  • 下载

Java设计模式-装饰者模式

  • 2015年05月20日 16:57
  • 18KB
  • 下载

Java中的装饰者模式

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案 接下来举一个例子来说明,这个例子是Head Frist 设计模式中的一个例子 场景:在星巴克的咖啡销售系统中...
  • qq_28007533
  • qq_28007533
  • 2016年12月08日 00:14
  • 712

Java 设计模式 装饰者模式

装饰者模式 在设计的时候,往往要给一个对象的功能进行一些修饰,对功能进行拓展和增强,以满足我们的需求。    举个例子,最近流行歌曲比赛,什么《中国好声音》,《中国好歌曲》什么的,对于一个参赛者而言...
  • u010349169
  • u010349169
  • 2014年02月09日 23:57
  • 5842

JAVA设计模式——装饰者模式

装饰者模式 动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 具体被装饰者和抽象装饰类都继承于抽象被装饰者类,继承的是类型,而不是行为。行为来自装饰者和基础组件,或与...
  • cai1213
  • cai1213
  • 2012年09月21日 11:51
  • 12245
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:装饰者模式 java代码小示例
举报原因:
原因补充:

(最多只允许输入30个字)