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

java設(shè)計(jì)模式之裝飾器模式(Decorator)

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

概述

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

模式的結(jié)構(gòu)

UML類圖:

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

代碼示例

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ā)經(jīng)理開始新的工作計(jì)劃");
  }
}

class ManagerB extends Manager{

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

  @Override
  public void startNewWork() {
    System.out.println("測試經(jīng)理開始新的工作計(jì)劃");
  }
}
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)缺點(diǎn):

優(yōu)點(diǎn):

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

缺點(diǎn):

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • @Valid 無法校驗(yàn)List<E>的問題

    @Valid 無法校驗(yàn)List<E>的問題

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

    Spring Boot 開發(fā)私有即時(shí)通信系統(tǒng)(WebSocket)

    本文利用Spring Boot作為基礎(chǔ)框架,Spring Security作為安全框架,WebSocket作為通信框架,實(shí)現(xiàn)點(diǎn)對點(diǎn)聊天和群聊天
    2017-04-04
  • 解決Springboot get請求是參數(shù)過長的情況

    解決Springboot get請求是參數(shù)過長的情況

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

    Mybatis枚舉類型轉(zhuǎn)換源碼分析

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

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

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

    詳解springboot通過Async注解實(shí)現(xiàn)異步任務(wù)及回調(diào)的方法

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

    Java?Maven?Settings配置參考教程

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

    Java使用JSqlParser解析SQL語句應(yīng)用場景

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

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

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

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

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

最新評論

云梦县| 邢台县| 和平区| 瑞丽市| 扶沟县| 孟连| 新郑市| 兴文县| 剑川县| 长治县| 武宁县| 巫山县| 恩施市| 丰城市| 武平县| 托克托县| 奉新县| 灵石县| 门头沟区| 扎囊县| 开江县| 马山县| 南平市| 溧阳市| 黔东| 土默特左旗| 廉江市| 淮南市| 吴桥县| 内江市| 磐石市| 定结县| 沈丘县| 江达县| 江山市| 天柱县| 芮城县| 宁化县| 岚皋县| 明溪县| 织金县|