欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設計模式之裝飾模式詳解

 更新時間:2022年08月27日 15:33:16   作者:niuyongzhi  
這篇文章主要介紹了Java設計模式中的裝飾者模式,裝飾者模式即Decorator Pattern,裝飾模式是在不必改變原類文件和使用繼承的情況下,動態(tài)地擴展一個對象的功能,裝飾模式又名包裝模式。裝飾器模式以對客戶端透明的方式拓展對象的功能,是繼承關系的一種替代方案

1.什么是裝飾模式

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

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

2.如何實現(xiàn)

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

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

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

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

3.代碼實現(xiàn)

1)抽象組件

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

2)被裝飾者

/**
 * 被裝飾者,是抽象組件的一個子類,定義需要被裝飾的方法
 */
public class Cake extends ICake {
    /**
     * 被裝飾類中,裝飾方法的基本實現(xiàn)
     * @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)利用子類繼承也能實現(xiàn)某個方法的增強。相比通過裝飾模式實現(xiàn),裝飾模式有和優(yōu)勢?

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

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

5.JavaIo與裝飾模式

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

Reader

FileReader

BufferdReader

到此這篇關于Java設計模式之裝飾模式詳解的文章就介紹到這了,更多相關Java裝飾模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java的JSON轉換類庫GSON的基礎使用教程

    Java的JSON轉換類庫GSON的基礎使用教程

    GSON是谷歌開源的一款Java對象與JSON對象互相轉換的類庫,Java的JSON轉換類庫GSON的基礎使用教程,需要的朋友可以參考下
    2016-06-06
  • java實體類轉json時null值不要轉為"null"問題

    java實體類轉json時null值不要轉為"null"問題

    這篇文章主要介紹了java實體類轉json時null值不要轉為“null”問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java HashMap的工作原理

    Java HashMap的工作原理

    這篇文章主要介紹了Java HashMap的工作原理的相關資料,需要的朋友可以參考下
    2016-03-03
  • SpringCloud?LoadBalancerClient?負載均衡原理解析

    SpringCloud?LoadBalancerClient?負載均衡原理解析

    LoadBalancerClient?是?SpringCloud?提供的一種負載均衡客戶端,Ribbon?負載均衡組件內部也是集成了?LoadBalancerClient?來實現(xiàn)負載均衡,本文給大家深入解析?LoadBalancerClient?接口源碼,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Java SpringBoot啟動指定profile的8種方式詳解

    Java SpringBoot啟動指定profile的8種方式詳解

    這篇文章主要介紹了spring boot 如何指定profile啟動的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java手寫持久層框架的詳細代碼

    Java手寫持久層框架的詳細代碼

    這篇文章主要介紹了Java手寫持久層框架,本文適合有一定java基礎的同學,通過自定義持久層框架,可以更加清楚常用的mybatis等開源框架的原理,需要的朋友可以參考下
    2022-08-08
  • Java之InputStreamReader類的實現(xiàn)

    Java之InputStreamReader類的實現(xiàn)

    這篇文章主要介紹了Java之InputStreamReader類的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 淺談java中的移動位運算:,>>>

    淺談java中的移動位運算:,>>>

    這篇文章主要介紹了java中的移動位運算:,>>>文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Java中文件管理系統(tǒng)FastDFS詳解

    Java中文件管理系統(tǒng)FastDFS詳解

    這篇文章主要介紹了Java中文件管理系統(tǒng)FastDFS詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java?agent?使用實例詳解

    Java?agent?使用實例詳解

    Java Agent技術,也稱為Java代理、Java探針,它允許程序員利?其構建?個獨?于應?程序的代理程序,這篇文章主要介紹了Java?agent?使用詳解,需要的朋友可以參考下
    2022-12-12

最新評論