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

溫馨提示×

溫馨提示×

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

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

Java設計模式之裝飾模式是什么及怎么實現

發布時間:2022-08-29 17:33:50 來源:億速云 閱讀:141 作者:iii 欄目:開發技術

這篇“Java設計模式之裝飾模式是什么及怎么實現”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java設計模式之裝飾模式是什么及怎么實現”文章吧。

1.什么是裝飾模式

當我們想要改進或增強某個對象的功能,而又不想繼承該類創建子類,可以考慮使用裝飾模式。

使用裝飾模式增強對象的某個功能,比生成子類再增強,更為靈活。

2.如何實現

1)抽象組件:定義一個抽象類,該抽象類定義了“被裝飾者”需要被“裝飾的方法”

2)具體組件:抽象組件的一個子類。成為“被裝飾類”

3)裝飾組件:也是抽象組件的一個子類。該類中持有“被裝飾者”的引用,用來調用被裝飾者的方法。可以為抽象類,也可以是非抽象類。

4)具體裝飾類:是裝飾組件的一個子類,被稱為“裝飾者”

3.代碼實現

1)抽象組件

/**
 * 抽象組件,定義了被裝飾類需要裝飾的方法
 */
public abstract class ICake {
    /**
     * 需要裝飾的方法
     * @return
     */
    public abstract int getPrice();
}

2)被裝飾者

/**
 * 被裝飾者,是抽象組件的一個子類,定義需要被裝飾的方法
 */
public class Cake extends ICake {
    /**
     * 被裝飾類中,裝飾方法的基本實現
     * @return
     */
    @Override
    public int getPrice() {
        System.out.println("getPrice");
       return 100;
    }
}

3)裝飾類

/**
 * 裝飾類,也是抽象組件的一個子類。
 * 可以是抽象類,也可以是非抽象類。
 */
public abstract class CakeDecorator extends ICake {
    /**
     * 被裝飾類的引用,需要在裝飾類中,調用到被裝飾類的方法。
     */
    ICake cake;
    public CakeDecorator(ICake cake){
        this.cake = cake;
    }
}

4)具體裝飾

/**
 * 具體裝飾類
 */
public class BlueBerryCake extends CakeDecorator {
    public BlueBerryCake(ICake cake) {
        super(cake);
    }
    /**
     * 被裝飾的方法
     * 在調用到被裝飾類的基礎方法后,還要調用裝飾類要增強的方法
     * @return
     */
    @Override
    public float getPrice(){
        return cake.getPrice()+elsePrice();
    }
    /**
     * 增強的方法
     * @return
     */
    private float elsePrice(){
        System.out.println("else getPrice");
        return 50;
    }
}

5)測試類

public class TestDecorator {
    public static void main(String args[]){
        ICake cake = new Cake();
        CakeDecorator decorater = new BlueBerryCake(cake);
        float price = decorater.getPrice();
        System.out.println(price);
    }
}

4.拓展

1)利用子類繼承也能實現某個方法的增強。相比通過裝飾模式實現,裝飾模式有和優勢?

被裝飾者和裝飾者是松耦合關系。裝飾類僅僅依賴于抽象組件,裝飾類只需要知道被裝飾類是抽象組件的一個子類,而不必知道具體是哪個子類。

裝飾模式滿足“開-閉原則”,不必修改具體組件,就可以增加針對該組件的裝飾類。

5.JavaIo與裝飾模式

java.IO包中的很多類使用了裝飾模式。

Reader

FileReader

BufferdReader

以上就是關于“Java設計模式之裝飾模式是什么及怎么實現”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

和平区| 随州市| 棋牌| 海南省| 丰城市| 佛冈县| 太谷县| 乌鲁木齐县| 嘉鱼县| 宝鸡市| 镇巴县| 青岛市| 织金县| 颍上县| 新丰县| 安龙县| 峨眉山市| 卓资县| 寿宁县| 大悟县| 昭苏县| 乡宁县| 瓦房店市| 黑河市| 宜章县| 定襄县| 巴林右旗| 武陟县| 沁阳市| 八宿县| 文山县| 武汉市| 阳曲县| 平果县| 伊春市| 刚察县| 神农架林区| 武宁县| 浦县| 昌黎县| 雷波县|