码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-11 13:13:06      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:是什么   目的   auto   测试   over   接收   rac   wrapper   com   

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、测试,运行结果如下

技术分享

 

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

标签:是什么   目的   auto   测试   over   接收   rac   wrapper   com   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!