Welcome

首页 / 软件开发 / 数据结构与算法 / 装饰模式1

装饰模式12011-12-28 blogjava 天堂露珠[关键字]:java,design pattern,设计模式,《Java与模式》学习,decorator,装饰模式

[环境]:StarUML5.0 + JDK6

[作者]:Winty (wintys@gmail.com)

[正文]:

  package pattern.decorator;  /**  * 装饰模式:Decorator Pattern  * @version 2009-6-5  * @author Winty(wintys@gmail.com)  */  public class DecoratorTest{    public static void main(String[] args){        Component component;        component = new ConcreteComponent();        component.doSomething();        System.out.println("");                //透明的装饰模式        Component decorator;        decorator = new ConcreteDecorator(component);        decorator.doSomething();        System.out.println("");        //半透明的装饰模式        ConcreteDecorator decorator2;        decorator2 = new ConcreteDecorator(component);        decorator2.doSomething();        decorator2.doOtherThings();    }  }  /**  * 抽象构件:Component  */  interface Component{    public abstract void doSomething();  }  /**  * 具体构件:ConcreteComponent  */  class ConcreteComponent implements Component{    @Override    public void doSomething(){        System.out.println("do something");    }  }  /**  * 装饰:Decorator  */  abstract class Decorator implements Component{    private Component comp;    public Decorator(Component comp){        this.comp = comp;    }    @Override    public void doSomething(){        comp.doSomething();    }  }  /**  * 具体装饰:ConcreteDecorator  */  class ConcreteDecorator extends Decorator{    public ConcreteDecorator(Component comp){        super(comp);    }    @Override    public void doSomething(){        super.doSomething();        doMoreThings();    }    private void doMoreThings(){        System.out.println("do more things.");    }    /**     * 新增的方法不是Component接口的一部分,     * 所以不能通过Component接口透明地访问。     */    public void doOtherThings(){        System.out.println("do other things.");    }  }