[知了堂學習筆記]_設計模式之裝飾者模式

允許向一個現有的對象添加新的功能,但是不改變其結構。也就是給一個對象做一個在外的包裝。

裝飾者模式的創建思路:
1.定義一個接口,該接口中的方法是必須要實現的方法;
2.設計一個或者多個的裝飾者,每個都繼承接口,並且將接口作爲構造函數的參數傳入;
3.使用一個主體類,繼承接口並且實現確切的功能;

package decorator;
/*
 * 裝飾者模式
 */
public abstract class Humburger{

    public String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public abstract Integer getPrice();
}
package decorator;
/*
 * 裝飾者模式
 */
public class Chicken extends Humburger{

    public Chicken(){
        name = "雞腿堡";
    }
    @Override
    public Integer getPrice() {
        // TODO Auto-generated method stub
        return 10;
    }

}
package decorator;
/*
 * 裝飾者模式
 */
public class Beef extends Humburger{

    public Beef(){
        name = "牛肉堡";
    }

    @Override
    public Integer getPrice() {
        // TODO Auto-generated method stub
        return 15;
    }

}
package decorator;
/*
 * 裝飾者模式
 */
public abstract class Condiment extends Humburger{

    public abstract String getName();
}
package decorator;
/*
 * 裝飾者模式
 */
public class Lettuce extends Condiment{

    Humburger humburger;

    public Lettuce(Humburger humburger){
        this.humburger = humburger;
    }

    @Override
    public String getName() {
        // TODO Auto-generated method stub
        return humburger.getName()+"生菜";
    }

    @Override
    public Integer getPrice() {
        // TODO Auto-generated method stub
        return humburger.getPrice()+2;
    }

}
package decorator;
/*
 * 裝飾者模式
 */
public class Chilli extends Condiment{

    Humburger humburger;

    public Chilli(Humburger humburger){
        this.humburger = humburger;
    }

    @Override
    public String getName() {
        // TODO Auto-generated method stub
        return humburger.getName()+"辣椒";
    }

    @Override
    public Integer getPrice() {
        // TODO Auto-generated method stub
        return humburger.getPrice();
    }

}
package decorator;
/*
 * 裝飾者模式
 */
public class CreatHum {

    public static void main(String[] args) {
        Humburger humburger = new Chicken();
        System.out.println(humburger.getName()+" 價錢"+humburger.getPrice());
        Lettuce lettuce = new Lettuce(new Beef());
        System.out.println(lettuce.getName()+" 價錢"+lettuce.getPrice());
        Chilli chilli = new Chilli(new Lettuce(new Beef()));
        System.out.println(chilli.getName()+" 價錢"+chilli.getPrice());
        Chilli chilli1 = new Chilli(new Lettuce(new Chicken()));
        System.out.println(chilli1.getName()+" 價錢"+chilli1.getPrice());
    }

}

請關注“知了堂學習社區”,地址:http://www.zhiliaotang.com/portal.php

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章