一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JAVA設計模式之組合模式原理與用法詳解

JAVA設計模式之組合模式原理與用法詳解

2020-12-10 13:52遲做總比不做強 Java教程

這篇文章主要介紹了JAVA設計模式之組合模式,簡單說明了組合模式的原理,并結合實例分析了java組合模式的具體用法,需要的朋友可以參考下

本文實例講述了JAVA設計模式組合模式。分享給大家供大家參考,具體如下:

組合(整體與部分關系)模式:將不同但是相關的對象組合成樹形結構以實現“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。

* 模式角色組成:

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

2.Leaf對象: 整體中的部分,沒有下一級。

3.Composite對象: 用來存儲子部件,在Component接口中實現與部分有關操作。

以公司構成為例,比如公司有總公司,總公司下有分公司,分公司下有辦事處等。構成一個樹形結構。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * 抽象類:用來管理子類
 * @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);// 刪除公司:如因故關閉分公司
  protected abstract void show(int level);//顯示公司所在的層級:總公司,分公司,辦事處等
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
 * 分公司對象
 * @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);
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * Leaf結點類:公司市場部
 * @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) {
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
 * Leaf結點類:公司技術部
 * @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) {
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Firm head = new BranchFirm("深圳XX集團有限公司");// 公司總部
    head.append(new MarketDepartment("深圳XX集團有限公司--市場部"));
    head.append(new MinTechDepartment("深圳XX集團有限公司--技術部"));
    Firm jsFirm = new BranchFirm("深圳XX集團有限公司-江蘇分公司");
    jsFirm.append(new MarketDepartment("深圳XX集團有限公司-江蘇分公司市場部"));
    jsFirm.append(new MinTechDepartment("深圳XX集團有限公司-江蘇分公司技術部"));
    Firm szFirm = new BranchFirm("深圳XX集團有限公司-江蘇分公司-蘇州辦事處");
    szFirm.append(new MinTechDepartment("深圳XX集團有限公司-江蘇分公司-蘇州辦事處技術部"));
    szFirm.append(new MarketDepartment("深圳XX集團有限公司-江蘇分公司-蘇州辦事處市場部"));
    jsFirm.append(szFirm);
    // 如果還需要新增分公司或辦事處等,就繼續按照上述操作處理
    head.append(jsFirm);
    head.show(0);
  }
}

通常:在需要表示對象的整體與部分層次結構或需要忽略組合的整體對象與部分對象的不同,統一地使用整體中的部門情況下來使用組合模式。

希望本文所述對大家java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99国产小视频 | 校园全肉高h湿一女多男 | 成人免费公开视频 | 亚洲国产精品网 | 亚洲天堂h| 激情综合站 | 白丝萝莉喷水 | 97久久天天综合色天天综合色hd | 日产精品卡一卡2卡三卡乱码工厂 | 双子母性本能在线观看 | 饭冈加奈子在线播放观看 | 久久午夜一区二区 | 免费一级毛片完整版在线看 | 视频二区 素人 欧美 日韩 | 欧美肥胖bb | 天天快乐高清在线观看 | 亚洲国产欧美另类 | 色呦呦在线免费观看 | 国产一卡2卡3卡四卡精品网站 | 欧美一级欧美一级高清 | а天堂中文最新版在线 | 风间由美一区二区av101 | 日本欧美强乱视频在线 | 欧美一级鲁丝片免费看 | 亚洲spank男男实践网站 | 99影视在线视频免费观看 | 国产3p在线 | 91制片厂制作果冻传媒破解 | xxx86日本人| 我被男人下药添得好爽 | 国产精品久久久久久久久齐齐 | 日韩欧美综合在线二区三区 | 国产成人精品第一区二区 | 国产综合成人久久大片91 | h片在线看 | 日本妇人成熟免费观看18 | 1377大但人文艺术包子铺 | 四虎网站 | gaygayas男男免费中国 | 国产成人精品一区二区仙踪林 | 日本免费播放 |