设计模式之装饰者模式

来源:互联网 发布:华讯网络 电科软信 编辑:程序博客网 时间:2024/06/08 18:23

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();    //增加一些功能  }}




原创粉丝点击