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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - java設(shè)計模式之組合模式(Composite)

java設(shè)計模式之組合模式(Composite)

2020-07-21 11:39yuminfeng728 Java教程

這篇文章主要為大家詳細(xì)介紹了java設(shè)計模式之組合模式Composite,具有一定的參考價值,感興趣的小伙伴們可以參考一下

概述

是一種結(jié)構(gòu)型模式,將對象以樹形結(jié)構(gòu)組織起來,以表示“部分 - 整體”的層次結(jié)構(gòu),使得客戶端對單個對象和組合對象的使用具有唯一性。

UML類圖

java設(shè)計模式之組合模式(Composite)

上面的類圖包含的角色:

Component:為參加組合的對象聲明一個公共的接口,不管是組合還是葉節(jié)點。
Leaf:在組合中表示葉子結(jié)點對象,葉子結(jié)點沒有子結(jié)點。
Composite表示參加組合的有子對象的對象,并給出樹枝構(gòu)建的行為;

代碼示例

java" id="highlighter_475343">
?
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import java.util.ArrayList;
import java.util.List;
 
abstract class Component {
 
  protected String name;
 
  public Component(String name) {
    this.name = name;
  }
 
  public abstract void Add(Component c);
 
  public abstract void Remove(Component c);
 
  public abstract void GetChild(int depth);
}
 
class Leaf extends Component {
 
  public Leaf(String name) {
    super(name);
  }
 
  @Override
  public void Add(Component c) {
    System.out.println("Can not add to a leaf");
  }
 
  @Override
  public void Remove(Component c) {
    System.out.println("Can not remove from a leaf");
  }
 
  @Override
  public void GetChild(int depth) {
    String temp = " ";
    for (int i = 0; i < depth; i++) {
      temp += "-";
      System.out.println(temp + name);
    }
  }
 
}
 
class Composite extends Component {
 
  private List<Component> children = new ArrayList<>();
 
  public Composite(String name) {
    super(name);
  }
 
  @Override
  public void Add(Component c) {
    children.add(c);
  }
 
  @Override
  public void Remove(Component c) {
    children.remove(c);
  }
 
  @Override
  public void GetChild(int depth) {
 
    for (Component c : children) {
      c.GetChild(depth);
    }
  }
 
}
 
public class Main {
 
  public static void main(String args[]) {
    Composite root = new Composite("root");
    root.Add(new Leaf("Leaf A"));
    root.Add(new Leaf("Leaf B"));
 
    Composite compX = new Composite("Composite X");
    compX.Add(new Leaf("Leaf XA"));
    compX.Add(new Leaf("Leaf XB"));
    root.Add(compX);
 
    Composite compXY = new Composite("Composite XY");
    compXY.Add(new Leaf("Leaf XYA"));
    compXY.Add(new Leaf("Leaf XYB"));
    compX.Add(compXY);
 
    root.GetChild(3);
  }
 
}

應(yīng)用場景

1.要求表示對象的部分-整體層次結(jié)構(gòu)。
2.想要客戶端忽略組合對象與單個對象的差異,客戶端將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對象。

組合模式定義由Leaf對象和Composite對象組成的類結(jié)構(gòu);
使得客戶端變得簡單;
它使得添加或刪除子部件變得很容易。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲天天综合 | 女人全身裸露无遮挡免费观看 | xnxx18美女 | 日本阿v在线播放 | 国产一级在线观看视频 | 亚洲欧洲淘宝天堂日本 | 日本视频免费在线 | 日韩精品 欧美 | 2012中文字幕中字视频 | 亚洲国产精品自在现线让你爽 | 91精品久久 | 九九大香尹人视频免费 | 国产一区二区三区免费在线视频 | 日韩天堂在线 | 国产欧美一区二区三区免费 | 国产精品污双胞胎在线观看 | 欧美精品v日韩精品v国产精品 | 波多野结衣在线看 | 男人的天堂久久精品激情 | 日韩在线视频在线 | 国色天香视频完整版 | chanelpreston欧美网站 | 无人在线视频高清免费观看动漫 | 国产91精品久久久久久 | 三级全黄的视频 | 久久精品无码人妻无码AV蜜臀 | 日本免费一区二区三区四区五六区 | 青青操在线播放 | 国产成人yy精品1024在线 | 5x视频在线观看 | 免费黄色小说 | 性奶乳妇| 国产盗摄美女嘘嘘视频 | 91精品国产高清久久久久久 | 男人的天堂视频 | 四虎影院com | 青青网站 | 国产青青操 | 无套大战白嫩乌克兰美女 | 欧美高清一区 | ass韩国美女人体pics |