JAVA设计模式初探之装饰者模式(二)

2014-11-24 00:07:52 · 作者: · 浏览: 1
/D5rLOyv22vMrHSHVtYW6907/ao6zWu9Kqyse4w0h1bWFutcTKtc/WwOC2vL/J0tS0q7XdvfjIpaOsvLSx7c/Ws/ZEZWNvcmF0b3IgZHQgPSBuZXcgRGVjb3JhdG9yX3NlY29uZChuZXcgRGVjb3JhdG9yX2ZpcnN0KG5ldyBEZWNvcmF0b3JfemVybyhodW1hbikpKTvV4tbWveG5ubXE0fnX06Gjy/nS1LWxtffTw2R0LndlYXJDbG90aGVzKCk7ZHQud2Fsa1RvV2hlcmUoKbXEyrG68qOs09bS8s6qw7+49r7fzOXXsMrO1d/A4NbQo6y2vM/ItffTw3N1cGVyLndlYXJDbG90aGVzus1zdXBlci53YWxrVG9XaGVyZSgpt723qKOstvi4w3N1cGVy0tG+rdPJubnU7LSrtd2yota4z/LBy77fzOW1xMSz0ru49tewys7V38Dgo6jV4rj2v8nS1Lj5vt3Q6NKqtfe7u8uz0PKjqaOsxMfDtLX308O1xLy0zqrXsMrOwOC1xLe9t6ijrMi7uvOyxbX308PX1MnttcTXsMrOt723qKOsvLSx7c/Ws/bSu9bW17DKzqGiwbTKvbXEwOAmIzIwMjg0O9Pauf3Cy7XE0NDOqqGjPGJyPgozoaK+38zlsbvXsMrO1d/A4KOsv8nS1Lao0uWz9cq8tcTXtMysu/LV37P1yry1xNfUvLq1xNewys6jrLrzw+a1xNewys7Q0M6qtrzU2rTLu/m0ocnP0ruyvdK7sr29+NDQtePXuqGi17DKzqGjPGJyPgo0oaLXsMrO1d/Eo8q9tcTJ6LzG1K3U8s6qo7q21MCp1bm/qrfFoaK21NDeuMS52LHVo6zV4r7ku7DM5c/W1NrO0sjnufvP68Cp1bmxu9ewys7V38DgtcTQ0M6qo6zO3tDr0N64xNewys7V37Ppz/PA4KOs1rvQ6LzMs9DXsMrO1d+z6c/zwOCjrMq1z9a27s3itcTSu9Cp17DKzrvy1d+90NDQzqq8tL/JttSxu9ewys7V37340NCw/NewoaPL+dLUo7rAqdW5zOXP1tTavMyz0KGi0N64xMzlz9bU2tfTwODW0KOstviyu8rHvt/M5bXEs+nP88Dgo6zV4rPkt9bM5c/WwcvSwMC1tbnWw9St1PKjrNXiysfX1Ly6wO294rXE17DKztXfxKPKvaGjPC9wPgo8cD48YnI+Csu1tcSyu8fls/6jrNPQ0KnWu7/J0uK74bK7v8nR1LSrtcS40L71o6y24L+0vLix6bT6wuujrMi7uvPX1Ly6x8Oz9sC01MvQ0NK7z8KjrLv5sb7Jz77NwezO8sHLoaM8L3A+CjxwPjxicj4KPHdicj7PwsPm1eK49sD919PSstPQ1vrT2sDtveIg17DKzrXEwfezzLrN1/fTwzwvcD4KPHA+z9bU2tDo0qrSu7j2urqxpKOs1vfM5crHvKbNyLGko6y/ydLU0aHU8cztvNPJ+rLLoaK9tKGiwLG9t7XItcjQ7bbgxuTL+7XExeTBz6Os1eLW1sfpv/bPwr7Nv8nS1Mq508PXsMrO1d/Eo8q9oaM8L3A+CjxwPjxicj4KurqxpLv5wOCjqLG717DKztXfo6zP4LWx09rJz8PmtcRIdW1hbqOpPC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">package decorator; public abstract class Humburger { protected String name ; public String getName(){ return name; } public abstract double getPrice(); } 鸡腿堡类(被装饰者的初始状态,有些自己的简单装饰,相当于上面的Person)

package decorator;  
  
public class ChickenBurger extends Humburger {  
      
    public ChickenBurger(){  
        name = "鸡腿堡";  
    }  
  
    @Override  
    public double getPrice() {  
        return 10;  
    }  
  
}  

配料的基类(装饰者,用来对汉堡进行多层装饰,每层装饰增加一些配料,相当于上面Decorator)

package decorator;  
  
public abstract class Condiment extends Humburger {  
      
    public abstract String getName();  
  
}  

生菜(装饰者的第一层,相当于上面的decorator_zero)

package decorator;  
  
public class Lettuce extends Condiment {  
      
    Humburger humburger;  
      
    public Lettuce(Humburger humburger){  
        this.humburger = humburger;  
    }  
  
    @Override  
    public String getName() {  
        return humburger.getName()+" 加生菜";  
    }  
  
    @Override  
    public double getPrice() {  
        return humburger.getPrice()+1.5;  
    }  
  
}  


辣椒(装饰者的第二层,相当于上面的decorator_first)

package decorator;  
  
public class Chilli extends Condiment {  
      
    Humburger humburger;  
      
    public Chilli(Humburger humburger){  
        this.humburger = humburger;  
          
    }  
  
    @Override  
    public String getName() {  
        return humburger.getName()+" 加辣椒";  
    }  
  
    @Override  
    public double getPrice() {  
        return humburger.getPrice();  //辣椒是免费的哦  
    }  
  
}  


测试类

package decorator;  
  
public class Test {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        Humburger humburger = new ChickenBurger();  
        System.out.println(humburger.getName()+"  价钱:"+humburger.getPrice());  
        Lettuce let