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

JAVA設(shè)計(jì)模式之組合模式原理與用法詳解

 更新時(shí)間:2017年08月03日 09:16:04   作者:遲做總比不做強(qiáng)  
這篇文章主要介紹了JAVA設(shè)計(jì)模式之組合模式,簡單說明了組合模式的原理,并結(jié)合實(shí)例分析了java組合模式的具體用法,需要的朋友可以參考下

本文實(shí)例講述了JAVA設(shè)計(jì)模式之組合模式。分享給大家供大家參考,具體如下:

組合(整體與部分關(guān)系)模式:將不同但是相關(guān)的對(duì)象組合成樹形結(jié)構(gòu)以實(shí)現(xiàn)“部分-整體”的層次結(jié)構(gòu),使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。

* 模式角色組成:

1.Component對(duì)象: 是組合中的對(duì)象接口,是所有類共有的接口。是用于統(tǒng)一定義整體中的部分。

2.Leaf對(duì)象: 整體中的部分,沒有下一級(jí)。

3.Composite對(duì)象: 用來存儲(chǔ)子部件,在Component接口中實(shí)現(xiàn)與部分有關(guān)操作。

以公司構(gòu)成為例,比如公司有總公司,總公司下有分公司,分公司下有辦事處等。構(gòu)成一個(gè)樹形結(jié)構(gòu)。

/**
 * 抽象類:用來管理子類
 * @description:
 * @date 2016-1-22 下午1:16:25
 */
public abstract class Firm {
  private String firmName;// 公司名稱
  public Firm(String firmName) {
    this.firmName = firmName;
  }
  public String getFirmName() {
    return firmName;
  }
  public void setFirmName(String name) {
    this.firmName = name;
  }
  protected abstract void append(Firm firm);// 添加公司如:新增分公司
  protected abstract void romove(Firm firm);// 刪除公司:如因故關(guān)閉分公司
  protected abstract void show(int level);//顯示公司所在的層級(jí):總公司,分公司,辦事處等
}

/**
 * 分公司對(duì)象
 * @description:
 * @date 2016-1-22 下午1:25:43
 */
public class BranchFirm extends Firm {
  private List<Firm> cList;
  public BranchFirm(String name) {
    super(name);
    cList = new ArrayList<Firm>();
  }
  @Override
  protected void append(Firm firm) {
    cList.add(firm);
  }
  @Override
  protected void show(int depth) {
    StringBuilder sb = new StringBuilder("");
    for (int i = 0; i < depth; i++) {
      sb.append("*");
    }
    System.out.println(new String(sb) + this.getFirmName());
    for (Firm c : cList) {
      c.show(depth + 2);
    }
  }
  @Override
  protected void romove(Firm firm) {
    // TODO Auto-generated method stub
    cList.remove(firm);
  }
}

/**
 * Leaf結(jié)點(diǎn)類:公司市場(chǎng)部
 * @description:
 * @date 2016-1-22 下午1:46:02
 */
public class MarketDepartment extends Firm {
  public MarketDepartment(String name) {
    super(name);
  }
  @Override
  protected void append(Firm company) {
  }
  @Override
  protected void show(int depth) {
    // TODO Auto-generated method stub
    StringBuilder sb = new StringBuilder("");
    for (int i = 0; i < depth; i++) {
      sb.append("*");
    }
    System.out.println(new String(sb) + this.getFirmName());
  }
  @Override
  protected void romove(Firm company) {
  }
}

/**
 * Leaf結(jié)點(diǎn)類:公司技術(shù)部
 * @description:
 * @date 2016-1-22 下午1:21:41
 */
public class MinTechDepartment extends Firm {
  public MinTechDepartment(String name) {
    super(name);
  }
  @Override
  protected void append(Firm firm) {
  }
  @Override
  protected void show(int depth) {
    StringBuilder sb = new StringBuilder("");
    for (int i = 0; i < depth; i++) {
      sb.append("*");
    }
    System.out.println(new String(sb) + this.getFirmName());
  }
  @Override
  protected void romove(Firm company) {
  }
}

public class Test {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Firm head = new BranchFirm("深圳XX集團(tuán)有限公司");// 公司總部
    head.append(new MarketDepartment("深圳XX集團(tuán)有限公司--市場(chǎng)部"));
    head.append(new MinTechDepartment("深圳XX集團(tuán)有限公司--技術(shù)部"));
    Firm jsFirm = new BranchFirm("深圳XX集團(tuán)有限公司-江蘇分公司");
    jsFirm.append(new MarketDepartment("深圳XX集團(tuán)有限公司-江蘇分公司市場(chǎng)部"));
    jsFirm.append(new MinTechDepartment("深圳XX集團(tuán)有限公司-江蘇分公司技術(shù)部"));
    Firm szFirm = new BranchFirm("深圳XX集團(tuán)有限公司-江蘇分公司-蘇州辦事處");
    szFirm.append(new MinTechDepartment("深圳XX集團(tuán)有限公司-江蘇分公司-蘇州辦事處技術(shù)部"));
    szFirm.append(new MarketDepartment("深圳XX集團(tuán)有限公司-江蘇分公司-蘇州辦事處市場(chǎng)部"));
    jsFirm.append(szFirm);
    // 如果還需要新增分公司或辦事處等,就繼續(xù)按照上述操作處理
    head.append(jsFirm);
    head.show(0);
  }
}

通常:在需要表示對(duì)象的整體與部分層次結(jié)構(gòu)或需要忽略組合的整體對(duì)象與部分對(duì)象的不同,統(tǒng)一地使用整體中的部門情況下來使用組合模式。

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • java之向linux文件夾下寫文件無權(quán)限的問題

    java之向linux文件夾下寫文件無權(quán)限的問題

    這篇文章主要介紹了java之向linux文件夾下寫文件無權(quán)限的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringCloud中的路由網(wǎng)關(guān)鑒權(quán)熔斷詳解

    SpringCloud中的路由網(wǎng)關(guān)鑒權(quán)熔斷詳解

    這篇文章主要介紹了SpringCloud中的路由網(wǎng)關(guān)鑒權(quán)熔斷詳解,Hystrix是一個(gè)用于處理分布式系統(tǒng)的延遲和容錯(cuò)的開源庫,在分布式系統(tǒng)里,許多依賴不可避免的會(huì)調(diào)用失敗,比如超時(shí)、異常等,需要的朋友可以參考下
    2024-01-01
  • SpringBoot2 參數(shù)管理實(shí)踐之入?yún)⒊鰠⑴c校驗(yàn)的方式

    SpringBoot2 參數(shù)管理實(shí)踐之入?yún)⒊鰠⑴c校驗(yàn)的方式

    這篇文章主要介紹了SpringBoot2 參數(shù)管理實(shí)踐,入?yún)⒊鰠⑴c校驗(yàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-06-06
  • SpringBoot中的@RequestMapping注解的用法示例

    SpringBoot中的@RequestMapping注解的用法示例

    @RequestMapping注解是SpringBoot中最常用的注解之一,它可以幫助開發(fā)者定義和處理HTTP請(qǐng)求,本篇文章我們將詳細(xì)為大家介紹如何使用SpringBoot中的@RequestMapping注解,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧
    2023-06-06
  • 淺談java調(diào)用Restful API接口的方式

    淺談java調(diào)用Restful API接口的方式

    這篇文章主要介紹了淺談java調(diào)用Restful API接口的方式,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Elasticsearch索引庫和文檔的相關(guān)操作詳細(xì)指南

    Elasticsearch索引庫和文檔的相關(guān)操作詳細(xì)指南

    這篇文章主要給大家介紹了關(guān)于Elasticsearch索引庫和文檔的相關(guān)操作的相關(guān)資料,Elasticsearch是用Java開發(fā)并且是當(dāng)前最流行的開源的企業(yè)級(jí)搜索引擎,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Spring Shell 命令行實(shí)現(xiàn)交互式Shell應(yīng)用開發(fā)

    Spring Shell 命令行實(shí)現(xiàn)交互式Shell應(yīng)用開發(fā)

    本文主要介紹了Spring Shell 命令行實(shí)現(xiàn)交互式Shell應(yīng)用開發(fā),能夠幫助開發(fā)者快速構(gòu)建功能豐富的命令行應(yīng)用程序,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Spring boot框架下的RabbitMQ消息中間件詳解

    Spring boot框架下的RabbitMQ消息中間件詳解

    這篇文章詳細(xì)介紹了Spring Boot框架下的RabbitMQ消息中間件的基本概念、消息傳輸模型、環(huán)境準(zhǔn)備、Spring Boot集成以及消息生產(chǎn)和消費(fèi),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Springboot+MybatisPlus實(shí)現(xiàn)帶驗(yàn)證碼的登錄

    Springboot+MybatisPlus實(shí)現(xiàn)帶驗(yàn)證碼的登錄

    本文主要介紹了Springboot+MybatisPlus實(shí)現(xiàn)帶驗(yàn)證碼的登錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 詳解Springboot 注入裝配到IOC容器方式

    詳解Springboot 注入裝配到IOC容器方式

    今天通過實(shí)例代碼給大家介紹了Springboot 注入裝配到IOC容器方式,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友跟隨小編一起看看吧
    2021-10-10

最新評(píng)論

新宾| 瑞金市| 教育| 视频| 兴山县| 新宁县| 宁河县| 从化市| 长葛市| 贵定县| 扶绥县| 溧水县| 旺苍县| 内黄县| 宁安市| 渝北区| 和顺县| 化隆| 浑源县| 澄城县| 瓦房店市| 福贡县| 西盟| 赫章县| 浪卡子县| 宁强县| 弥勒县| 新巴尔虎右旗| 遵义县| 延津县| 响水县| 吴江市| 将乐县| 北碚区| 无极县| 佛学| 长治市| 正定县| 昌图县| 楚雄市| 平凉市|