首页 > 其他 > 详细

设计模式(十一)---装饰者模式

时间:2017-09-11 12:57:21      阅读:168      评论:0      收藏:0      [点我收藏+]

1、简介

  装饰者模式又叫包装模式(wrapper),装饰者模式以对客户端透明的方式扩展对象的功能,是继承关系的一种替代方案。

  装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为。

 

2、装饰者模式的各个角色

   2.1、抽象构件角色 :在下面例子中为Human抽象接口,目的是为了规范准备接收附加责任的对象

   2.2、具体构件角色 :在下面例子中为Decorator抽象类,这是准备接收附加责任的类

   2.3、装  饰  角   色 :在下面例子中为Decorator1、Decorator2

   2.4、被 装 饰 角 色:在下面例子中为WhatMe

3、源代码

  3.1、抽象构件角色

package Decorator;
/**
 * ********************************************************  
* @ClassName: Human 
* @Description: 抽象构件角色
*  
**********************************************************
 */
public interface Human {
     public void Say();
}

  3.2、具体构件角色

package Decorator;
/**
 * ********************************************************  
* @ClassName: Decorator 
* @Description: 具体构件角色
*  
**********************************************************
 */
public abstract class Decorator  implements Human{
    private Human human;
    
    public Decorator(Human human){
        this.human=human;
    }

    @Override
    public void Say() {
         human.Say();  
        
    }
}

  3.3、装饰者1

package Decorator;
/**
 * ********************************************************  
* @ClassName: Decotator1 
* @Description: 装饰角色1
*  
**********************************************************
 */
public class Decotator1 extends Decorator{

    public Decotator1(Human human) {
        super(human);
    }
    
    public void woman(){
        System.out.println("我是女人");
    }
    
    
    public void Say() {
        super.Say();
        woman();
    }
    
}

  3.4、装饰者2

package Decorator;
/**
 * ********************************************************  
* @ClassName: Decorator2 
* @Description: 装饰者2
*  
**********************************************************
 */
public class Decorator2 extends Decorator{
    
    public Decorator2(Human human) {
        super(human);
        // TODO Auto-generated constructor stub
    }
    public void person(){
        System.out.println("我是人");
    }
    
    public void Say() {
        super.Say();
        person();
    }
}

  3.5、被装饰者

package Decorator;
/**
 * ********************************************************  
* @ClassName: WhatMe 
* @Description: 被装饰者 可以有一些初始装饰
*  
**********************************************************
 */
public class WhatMe implements Human{
    public void Say(){
        System.out.println("我是什么");
    }

}

  3.6、测试客户端

  

package Decorator;
/**
 * ********************************************************  
* @ClassName: Client 
* @Description: 装饰者模式测试类
*  
**********************************************************
 */
public class Client {

    public static void main(String[] args) {
        WhatMe me = new WhatMe();
        Decorator decorator = new Decotator1(new Decorator2(me));
        decorator.Say();
    }
}

4、测试,运行结果如下

技术分享

 

设计模式(十一)---装饰者模式

原文:http://www.cnblogs.com/shun-gege/p/7504385.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!