最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA裝飾者模式(從現(xiàn)實生活角度理解代碼原理)

 更新時間:2016年12月01日 08:41:34   作者:潘侯爺  
裝飾者模式可以動態(tài)地給一個對象添加一些額外的職責(zé)。就增加功能來說,Decorator模式相比生成子類更為靈活。這篇文章主要介紹了JAVA裝飾者模式的相關(guān)資料,需要的朋友可以參考下

裝飾者模式可以動態(tài)地給一個對象添加一些額外的職責(zé)。就增加功能來說,Decorator模式相比生成子類更為靈活。

該模式的適用環(huán)境為:

(1)在不影響其他對象的情況下,以動態(tài)、透明的方式給單個對象添加職責(zé)。

(2)處理那些可以撤消的職責(zé)。

(3)當(dāng)不能采用生成子類的方法進行擴充時。一種情況是,可能有大量獨立的擴展,為支持每一種組合將產(chǎn)生大量的子類,使得子類數(shù)目呈爆炸性增長。另一種情況可能是因為類定義被隱藏,或類定義不能用于生成子類。

實現(xiàn)該模式的關(guān)鍵步驟:

(1)Component(被裝飾對象基類):定義對象的接口,可以給這些對象動態(tài)增加職責(zé);

(2)ConcreteComponent(具體被裝飾對象):定義具體的對象,Decorator可以給它增加額外的職責(zé);

(3)Decorator(裝飾者抽象類):維護指向Component實例的引用,定義與Component一致的接口(也就是要繼承或?qū)崿F(xiàn)被裝飾對象基類);

(4)ConcreteDecorator(具體裝飾者):具體的裝飾對象,給內(nèi)部持有的具體被裝飾對象增加具體的職責(zé);

這樣講大家可能有些不好理解,那我們還是老規(guī)矩安靜:

入冬以后天氣越來越冷了,下班之后,做為資深吃貨,約上二三好友痛快的來場火鍋盛宴再爽不過了。說到火鍋,不得不提在成都吃過的大龍燚火鍋,各種鍋底,配菜應(yīng)有盡有,但我最喜歡的還是大龍燚火鍋原味鍋底、麻辣牛肉、大刀毛肚、天味香腸、砣砣牛肉、麻辣排骨等,想想都流口水啊。

說道這大家結(jié)合裝飾者的實現(xiàn)步驟,應(yīng)該有點感覺了吧,上文提到的鍋底,其實就是被裝飾對象的基類,配料其實就是裝飾者抽象類,大龍燚火鍋原味鍋底這些具體的鍋底也就是具體的被裝飾對象了,麻辣牛肉、大刀毛肚、天味香腸、砣砣牛肉、麻辣排骨這些裝飾鍋底用的各種配菜也就是具體的裝飾對象。說道這,大家應(yīng)該都豁然開朗了吧,下面我們開始具體的代碼實現(xiàn):

第一步:定義被裝飾對象基類(可以是抽象類也可以是接口)

 public interface GuoDi {
   public float cost();//鍋底當(dāng)然要有價錢啦
   public String name();//名字也得有哦
 }

第二步:定義具體被裝飾對象(也就是各種鍋底,這里定義兩種)

public class YuanYang implements GuoDi {
  @Override
  public float cost() {
    return 48.0f;
  }
  @Override
  public String name() {
    return "鴛鴦鍋底";
  }
}
public class DaLongYan implements GuoDi{
  @Override
  public float cost() {
    return 59.0f;
  }
  @Override
  public String name() {
    return "大龍燚火鍋原味鍋底";
  }
}

第三步:定義裝飾者抽象類

public abstract class PeiCai implements GuoDi {
  private GuoDi guodi;
  public FoodDecorator(GuoDi guodi) {
    super();
    this.guodi = guodi;
  }
  @Override
  public float cost() {
    return guodi.cost();
  }
  @Override
  public String name() {
    return guodi.name();
  }
}

第四步:定義具體的裝飾者對象

public class MaLaNiuRou extends PeiCai {
  public MaLaNiuRou(GuoDi guodi) {
    super(guodi);
  }
  @Override
  public float cost() {
    return super.cost()+46f;
  }
  @Override
  public String name() {
    return super.name()+"+麻辣牛肉";
  }
}
public class MaoDu extends PeiCai {

  public MaoDu(GuoDi guodi) {
    super(guodi);
  }
  @Override
  public float cost() {
    return super.cost()+30f;
  }
  @Override
  public String name() {
    return super.name()+"+大刀毛肚";
  }
}

測試類:

public class Test {
  public static void main(String[] args) {
    GuoDi guodi = new DaLongYan ();//點個大龍燚火鍋原味鍋底
    MaLaNiuRou y = new MaLaNiuRou(guodi);//來個麻辣牛肉
    MaoDu x = new MaoDu(y);//在麻辣牛肉的基礎(chǔ)上再來個大刀毛肚
    System.out.println("一共點了"+x.name()+",共消費"+s.cost());
  }
}

輸出結(jié)果:

 1 一共點了大龍燚火鍋原味鍋底+麻辣牛肉+大刀毛肚,共消費135

以上所述是小編給大家介紹的JAVA裝飾者模式(從現(xiàn)實生活角度理解代碼原理),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • mybatis原理概述入門教程

    mybatis原理概述入門教程

    這篇文章主要介紹了在今天這篇博文中,我將要介紹一下mybatis的框架原理,以及mybatis的入門程序,實現(xiàn)用戶的增刪改查,她有什么優(yōu)缺點以及mybatis和hibernate之間存在著怎么樣的關(guān)系,大家這些問題一起通過本文學(xué)習(xí)吧
    2016-09-09
  • Java實現(xiàn)樹形結(jié)構(gòu)管理的組合設(shè)計模式

    Java實現(xiàn)樹形結(jié)構(gòu)管理的組合設(shè)計模式

    Java組合模式是一種結(jié)構(gòu)型設(shè)計模式,它允許將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。組合模式使得用戶可以使用統(tǒng)一的方式處理單個對象和對象組合,從而簡化了系統(tǒng)的設(shè)計和維護
    2023-04-04
  • Spark內(nèi)存調(diào)優(yōu)指南

    Spark內(nèi)存調(diào)優(yōu)指南

    這篇文章主要為大家介紹了Spark內(nèi)存調(diào)優(yōu)指南數(shù)據(jù)序列化分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Springboot指定掃描路徑的實現(xiàn)示例

    Springboot指定掃描路徑的實現(xiàn)示例

    本文主要介紹了Springboot指定掃描路徑的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Hyperlane 文件分塊上傳服務(wù)端的解決方案

    Hyperlane 文件分塊上傳服務(wù)端的解決方案

    在現(xiàn)代Web應(yīng)用中,文件上傳是一個核心功能,尤其是對于大文件,傳統(tǒng)的上傳方式常常因網(wǎng)絡(luò)中斷或超時而失敗,為了解決這一痛點,我們推出了基于 Hyperlane 的文件分塊上傳服務(wù)端代碼,為開發(fā)者提供了一個高效、可靠的大文件上傳解決方案,感興趣的朋友一起看看吧
    2025-04-04
  • Java8中常見函數(shù)式接口的使用示例詳解

    Java8中常見函數(shù)式接口的使用示例詳解

    在 Java 8 中,函數(shù)式接口是一個關(guān)鍵的特性,它們允許將方法作為參數(shù)傳遞或返回類型,本文為大家整理了一些常見的函數(shù)式接口的使用,希望對大家有所幫助
    2023-12-12
  • IDEA新手必備之各種快捷鍵詳解

    IDEA新手必備之各種快捷鍵詳解

    這篇文章主要介紹了IDEA新手必備之各種快捷鍵詳解,文中有非常詳細(xì)的快捷鍵介紹,對正在使用IDEA的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • java多線程使用mdc追蹤日志方式

    java多線程使用mdc追蹤日志方式

    這篇文章主要介紹了java多線程使用mdc追蹤日志方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解如何開發(fā)一個MyBatis通用Mapper的輪子

    詳解如何開發(fā)一個MyBatis通用Mapper的輪子

    因為一些原因,例如:通用數(shù)據(jù)權(quán)限控制、MyBatis-Plus好像不支持聯(lián)合主鍵等,我們不得不開發(fā)一個MyBatis通用Mapper的輪子。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-12-12
  • java實現(xiàn)裝飾器模式(Decorator Pattern)

    java實現(xiàn)裝飾器模式(Decorator Pattern)

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)裝飾器模式Decorator Pattern,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10

最新評論

娱乐| 化隆| 吉安市| 汉阴县| 娄底市| 博湖县| 濮阳县| 扶沟县| 巴东县| 漯河市| 佛冈县| 仲巴县| 观塘区| 同心县| 镇雄县| 金塔县| 库车县| 洪江市| 建宁县| 龙海市| 天峻县| 崇左市| 兴和县| 喜德县| 馆陶县| 开阳县| 吴桥县| 双牌县| 阿克苏市| 泸溪县| 哈巴河县| 通海县| 阿拉善左旗| 额尔古纳市| 大邑县| 靖边县| 阳城县| 广昌县| 株洲市| 阜康市| 台东县|