装饰模式

装饰模式

装饰模式:给一个类添加一些额外的职责,并且在添加这些额外的职责时不会控制该类的执行逻辑。

组成部分:
抽象构件:原始的功能接口
具体构件:具体的原始功能类
装饰角色:持有具体构件类的对象,以便执行原有功能
具体装饰:具体扩展的功能在这里

下面看一个对开车功能拓展的实例(晚上+开车): (提取网上的实例)

看完下面的例子后,大家应该对这个模式有了一定的了解。。可以去看看JDK的源码。

JDK中  I/O 使用这个模式最多


抽象构件:

/** 
 * 抽象接口,规范准备接收附加责任的对象 
 * @author gjy 
 */  
public interface Component {  
    public void operation();  
}  
具体构件:
/** 
 * 接收附加责任, 此类型的类可以有多个, 只对应一个Decorator类 
 * @author gjy 
 */  
public class ConcreteComponent implements Component {  
    public ConcreteComponent(){}  
    public void operation(){  
           System.out.println("开车");  
    }  
}  
装饰角色

/** 
 * 装饰角色
*  持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口 
 */  
public class Decorator implements Component {  
    private Component component;  
    public Decorator(){}  
    public Decorator(Component component){  
           this.component = component;  
    }  
    public void operation() {  
           component.operation();  
    }  
}  
具体装饰:
/**
 * 添加附加责任
 * @author gjy
 */  
public class ConcreteDecorator extends Decorator {  
    public ConcreteDecorator(){}  
    public ConcreteDecorator(Component component){  
           super(component);  
    }  
    public void operation(){  
         this.addedOperation();  
         super.operation();  
    }  
    public void addedOperation(){  
           System.out.println("晚上");  
    }  
}  
/** 
 * 客户端类 
 * @author gjy 
 */  
  
public class Client {  
       public static void main(String[] args) {  
              Component component = new ConcreteComponent();  
              Decorator decorator = new ConcreteDecorator(component);  
              //客户端不变, 但已增加了责任  
              decorator.operation();  
                
       }  
}  






















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值