设计模式之装饰者模式

2 篇文章 0 订阅

1.什么是装饰模式

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

特点:扩展特定对象的功能,不是扩展某个类的功能;不需要子类,防止由于子类带来的复杂和混乱;对于一个给定对象,同时可能有不同的装饰对象,客户端可以通过它的需要选择合适的装饰对象。

2.装饰模式的结构

装饰模式以对客户端透明的方式为某个对象动态的附加更多功能,换言之,客户端不会觉得对象在装饰前后有什么区别。装饰模式可以在不使用创造更多子类的情况下,将对象功能进行扩展。


装饰者类图:


抽象构件(Component)角色:给出一个抽象接口,以规范接受附加责任的对象;

具体构件(ConcreteComponent)角色:定义一个接受附加责任的类;

装饰(Decorator)角色:持有一个构件对象的实例,并定义一个与抽象构件接口一致的接口;

具体装饰(ConcreteDecorator)角色:负责给构件对象贴上附加责任;


代码实现

/抽象构件角色  
public interface Component(){ 
  public void sampleOption(); 
} 


//具体构件角色  
public class ConcreteComponent implements Component(){ 
  public void sampleOption(){ 
      //some codes  
  } 
} 



//装饰角色  
public Decorator implements Component(){ 
  private Component component; 
  public Decorator(Component component){ 
    this.component = component; 
  } 
  public void sampleOption(){ 
    this.component.sampleOption(); 
  } 
} 


//具体装饰角色  
public class ConcreteDecorator extends Decorator(){ 
  public ConcreteDecorator(Component component){ 
    super(component); 
  } 
  public void sampleOption(){ 
    this.component.sampleOption(); 
    //增加一些功能  
  } 
} 

------------------------------------------------------------------
//抽象构件角色
public interface Component(){
  public void sampleOption();
}
//具体构件角色
public class ConcreteComponent implements Component(){
  public void sampleOption(){
      //some codes
  }
}
//装饰角色
public class Decorator implements Component(){
  private Component component;
  public Decorator(Component component){
    this.component = component;
  }
  public void sampleOption(){
    this.component.sampleOption();
  }
}
//具体装饰角色
public class ConcreteDecorator extends Decorator(){
  public ConcreteDecorator(Component component){
    super(component);
  }
  public void sampleOption(){
    this.component.sampleOption();
    //增加一些功能
  }
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值