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

java設計模式之裝飾器模式(Decorator)

 更新時間:2017年01月02日 14:59:42   作者:yuminfeng728  
這篇文章主要為大家詳細介紹了java設計模式之裝飾器模式Decorator,具有一定的參考價值,感興趣的小伙伴們可以參考一下

概述

裝飾模式是對客戶端以透明的方式擴展對象的功能,是繼承關系的一個替代方案。也就是說,客戶端并不會覺得對象在裝飾前和裝飾后有什么不同,裝飾模式可以在不用創(chuàng)造更多子類的情況下,將對象的功能加以擴展,裝飾模式的關鍵在于這種擴展是完全透明的。

模式的結構

UML類圖:

裝飾模式中的類角色:
抽象構件角色(Project):給出一個接口,以規(guī)范準備接收附加責任的對象
具體構件角色(Employe):定義一個將要接收附加責任的類
裝飾角色(Manager):持有一個構件對象的實例,并定義一個與抽象構件接口一致的接口
具體裝飾角色(ManagerA,ManagerB):負責給構件對象“貼上”附加的責任

代碼示例

package interview;

interface Project{
  void doCoding();
}

class Employe implements Project{

  @Override
  public void doCoding() {
    System.out.println("工程師在編程......");
  }
}

class Manager implements Project{

  private Project project;

  public Manager(Project project){
    this.project = project;
  }

  @Override
  public void doCoding() {
    startNewWork();
    project.doCoding();
  }

  public void startNewWork(){}
}

class ManagerA extends Manager{

  public ManagerA(Project project) {
    super(project);
  }

  @Override
  public void startNewWork() {
    System.out.println("開發(fā)經理開始新的工作計劃");
  }
}

class ManagerB extends Manager{

  public ManagerB(Project project) {
    super(project);
  }

  @Override
  public void startNewWork() {
    System.out.println("測試經理開始新的工作計劃");
  }
}
public class MainTest {

  public static void main(String arg[]) {
    Project project = new Employe();
    Project managerA = new ManagerA(project);
    Project managerB = new ManagerB(project);
    managerA.doCoding();
    managerB.doCoding();
  }
}

裝飾模式優(yōu)缺點:

優(yōu)點:

裝飾模式與繼承的目的都是要擴展對象的功能,但是裝飾模式可以提供比繼承更多的靈活性。裝飾模式允許系統動態(tài)決定“貼上”一個需要的“裝飾”,繼承關系則不同,繼承關系是靜態(tài)的,它在系統運行前就決定了。
通過使用不同的具體裝飾類以及這些裝飾類的組合,設計師可以創(chuàng)造很多不同的行為組合。

缺點:

由于使用裝飾模式,可以比使用繼承關系需要較少數目的類。使用較少的類,當然使設計比較易于進行。但是,在另一方面,使用裝飾模式會產生比使用繼承關系更多的對象。更多的對象會使得差錯變得困難,特別是這些對象看上去都很像。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • @Valid 無法校驗List<E>的問題

    @Valid 無法校驗List<E>的問題

    這篇文章主要介紹了@Valid 無法校驗List<E>的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring Boot 開發(fā)私有即時通信系統(WebSocket)

    Spring Boot 開發(fā)私有即時通信系統(WebSocket)

    本文利用Spring Boot作為基礎框架,Spring Security作為安全框架,WebSocket作為通信框架,實現點對點聊天和群聊天
    2017-04-04
  • 解決Springboot get請求是參數過長的情況

    解決Springboot get請求是參數過長的情況

    這篇文章主要介紹了解決Springboot get請求是參數過長的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Mybatis枚舉類型轉換源碼分析

    Mybatis枚舉類型轉換源碼分析

    在Mybatis的TypeHandlerRegistry中,添加了常用的類轉換器,其中默認的枚舉類型轉換器是EnumTypeHandler,這篇文章主要介紹了Mybatis枚舉類型轉換源碼分析,需要的朋友可以參考下
    2024-05-05
  • Java String、StringBuffer與StringBuilder的區(qū)別

    Java String、StringBuffer與StringBuilder的區(qū)別

    本文主要介紹Java String、StringBuffer與StringBuilder的區(qū)別的資料,這里整理了相關資料及詳細說明其作用和利弊點,有需要的小伙伴可以參考下
    2016-09-09
  • 詳解springboot通過Async注解實現異步任務及回調的方法

    詳解springboot通過Async注解實現異步任務及回調的方法

    這篇文章主要介紹了springboot通過Async注解實現異步任務及回調,文中通過一個簡單示例來直觀的理解什么是同步調用,在單元測試用例中,注入?SyncTask?對象,并在測試用例中執(zhí)行?doTaskOne(),doTaskTwo(),doTaskThree()?三個方法,具體實現方式跟隨小編一起看看吧
    2022-05-05
  • Java?Maven?Settings配置參考教程

    Java?Maven?Settings配置參考教程

    這篇文章主要介紹了Java?Maven?Settings配置參考,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Java使用JSqlParser解析SQL語句應用場景

    Java使用JSqlParser解析SQL語句應用場景

    JSqlParser是一個功能全面的Java庫,用于解析SQL語句,支持多種SQL方言,它可以輕松集成到Java項目中,并提供靈活的操作方式,本文介紹Java使用JSqlParser解析SQL語句總結,感興趣的朋友一起看看吧
    2024-09-09
  • mybatis多層嵌套resultMap及返回自定義參數詳解

    mybatis多層嵌套resultMap及返回自定義參數詳解

    這篇文章主要介紹了mybatis多層嵌套resultMap及返回自定義參數詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Spring Boot2與Spring Boot3的區(qū)別小結

    Spring Boot2與Spring Boot3的區(qū)別小結

    SpringBoot2和SpringBoot3之間有一些重要的區(qū)別,本文就來探討SpringBoot2和SpringBoot3之間的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10

最新評論

阿拉善右旗| 柏乡县| 芒康县| 环江| 九寨沟县| 商洛市| 股票| 忻城县| 冀州市| 芒康县| 黔西| 青冈县| 瓦房店市| 德惠市| 南川市| 大兴区| 神木县| 怀集县| 雷波县| 乐都县| 基隆市| 吴桥县| 阿拉善盟| 丹凤县| 曲阜市| 彰武县| 乾安县| 龙胜| 天门市| 平邑县| 天长市| 法库县| 古丈县| 广宗县| 菏泽市| 厦门市| 朔州市| 宜兰县| 柳河县| 通山县| 工布江达县|