中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java裝飾者模式如何使用

發布時間:2022-06-01 15:18:08 來源:億速云 閱讀:135 作者:iii 欄目:大數據

本篇內容介紹了“java裝飾者模式如何使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1、使用說明

(1)裝飾者模式可以帶來比繼承更加靈活的擴展功能,使用更加方法,可以通過組合不同的裝飾者對象來獲取具有不同行為狀態的多樣化的結果。裝飾者模式比繼承更具良好的擴展性,完美的遵循開閉原則,繼承是靜態的附加責任,裝飾者則是動態的附加責任。

(2)裝飾類和被裝飾類可以獨立發展,不會相互耦合,裝飾模式是繼承的一個替代模式,裝飾模式可以動態擴展一個實現類的功能。

2、實例

public class HelloWorld {
    public static void main(String[] args) {
        //點一份炒飯
        FastFood food = new FriedRice();
        //花費的價格
        System.out.println(food.getDesc() + " " + food.cost() + "元");
 
        System.out.println("========");
 
        //點一份加雞蛋的炒飯
        FastFood food1 = new FriedRice();
        food1 = new Egg(food1);
        //花費的價格
        System.out.println(food1.getDesc() + " " + food1.cost() + "元");
 
        System.out.println("========");
 
        //點一份加培根的炒面
        FastFood food2 = new FriedNoodles();
        food2 = new Bacon(food2);
        //花費的價格
        System.out.println(food2.getDesc() + " " + food2.cost() + "元");
    }
}
 
// 快餐抽象類
abstract class FastFood {
    private float price;
    private String desc;
 
    public FastFood() {}
 
    public FastFood(float price, String desc) {
        this.price = price;
        this.desc = desc;
    }
 
    public float getPrice() {
        return price;
    }
 
    public void setPrice(float price) {
        this.price = price;
    }
 
    public String getDesc() {
        return desc;
    }
 
    public void setDesc(String desc) {
        this.desc = desc;
    }
 
    // 獲取價格
    public abstract float cost();
}
 
// 炒飯
class FriedRice extends FastFood {
    public FriedRice() {
        super(10, "炒飯");
    }
 
    @Override
    public float cost() {
        return getPrice();
    }
}
 
// 炒面
class FriedNoodles extends FastFood {
    public FriedNoodles() {
        super(12, "炒面");
    }
 
    @Override
    public float cost() {
        return getPrice();
    }
}
 
// 配料
abstract class Garnish extends FastFood {
    private FastFood fastFood;
 
    public FastFood getFastFood() {
        return fastFood;
    }
 
    public void setFastFood(FastFood fastFood) {
        this.fastFood = fastFood;
    }
 
    public Garnish(FastFood fastFood, float price, String desc) {
        super(price, desc);
        this.fastFood = fastFood;
    }
}
 
// 雞蛋配料
class Egg extends Garnish {
    public Egg(FastFood fastFood) {
        super(fastFood, 1, "雞蛋");
    }
 
    @Override
    public float cost() {
        return getPrice() + getFastFood().getPrice();
    }
 
    @Override
    public String getDesc() {
        return super.getDesc() + getFastFood().getDesc();
    }
}
 
//培根配料
class Bacon extends Garnish {
    public Bacon(FastFood fastFood) {
        super(fastFood,2,"培根");
    }
 
    @Override
    public float cost() {
        return getPrice() + getFastFood().getPrice();
    }
 
    @Override
    public String getDesc() {
        return super.getDesc() + getFastFood().getDesc();
    }
}

“java裝飾者模式如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石屏县| 洛川县| 安龙县| 福州市| 资兴市| 革吉县| 贡嘎县| 佛山市| 亳州市| 柯坪县| 安岳县| 宁化县| 贺兰县| 临安市| 奎屯市| 张家港市| 青川县| 金山区| 盈江县| 鄂伦春自治旗| 封开县| 阿勒泰市| 浮山县| 宁阳县| 资阳市| 云南省| 格尔木市| 临漳县| 来安县| 宿迁市| 达拉特旗| 内乡县| 江源县| 新晃| 金川县| 肇庆市| 崇义县| 新宾| 阿城市| 迭部县| 平塘县|