java装饰者模式

1、定义

        动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

2、描述

      由 抽象构件角色(定义一个抽象接口,来规范准备附加功能的类)具体构件角色(将要被附加功能的类,实现抽象构件角色接口)、抽象装饰者角色(持有对具体构件角色的引用并定义与抽象构件角色一致的接口)和具体装饰角色(实现抽象装饰者角色,负责为具体构件添加额外功能)组成。

3、UML类图

       装饰者模式类图

4、Demo

 
/**  
 * 装饰者和组建的共同方法接口(抽象构件角色)  
 */  
interface Component {   
    public void justDoIt();   
}

/**  
 * 组件(具体构件角色)  
 */  
 class ConcreteComponent implements Component{   
    public void justDoIt() {   
        System.out.println("具体组件的方法,justDoIt!");   
    }   
}   

/**  
 * 抽象装饰者  
 */  
 abstract class Decorator implements Component{   
    private Component component; 
    
    public Decorator(Component component){   
        this.component = component;   
    }   
    /**  
     * 组件方法执行前预处理方法  
     */  
    protected void preDo(){};   
       
    /**  
     * 组件方法执行后处理方法  
     */  
    protected void afterDo(){};   
       
    public void justDoIt(){   
    	preDo();   
        component.justDoIt();   
        afterDo();   
    };   
}   

/**  
 * 具体装饰者 
 */  
class ConcreteDecorator1 extends Decorator{   
    public ConcreteDecorator1(Component component) {   
        super(component);   
    }   
  
    /**  
     * 根据需要重载模板类preSay()方法  
     */  
    protected void preDo(){   
        System.out.println("ConcreteDecorator1.preDo()");   
    }   
       
    /**  
     * 根据需要重载模板类afterSay()方法  
     */  
    protected void afterDo(){   
        System.out.println("ConcreteDecorator1.afterDo()");   
    }   
}   

/**  
 * 装饰者 
 */  
class ConcreteDecorator2 extends Decorator{   
  
    public ConcreteDecorator2(Component component) {   
        super(component);   
    }   
    /**  
     * 根据需要重载模板类preSay()方法  
     */  
    protected void preDo(){   
        System.out.println("ConcreteDecorator2.preDo()");   
    }   
       
    /**  
     * 根据需要重载模板类afterSay()方法  
     */  
    protected void afterDo(){   
        System.out.println("ConcreteDecorator2.afterDo()");   
    }   
}

public class DecoratorGenerater{
	public static void main(String[] args) {
		Component component = new ConcreteDecorator1(new ConcreteDecorator2(new ConcreteComponent()));
		component.justDoIt();
	}
}

5、IO类的装饰者模式实现

            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值