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

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

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

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

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

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

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

概述

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

UML類圖

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

上面的類圖包含的角色:

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

代碼示例

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);
  }
 
}

應用場景

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: www在线视频在线播放 | 亚洲福利天堂网福利在线观看 | 四虎4hu新地址入口 四虎1515h永久 | 久久热在线视频精品店 | 操骚0 | 国产精品国产高清国产专区 | 色老板美国在线观看 | 欧美日韩高清不卡一区二区三区 | 隔壁老王国产在线精品 | 77成人影院 | 免费特黄一级欧美大片在线看 | 视频一区久久 | 成人深夜视频 | 男gay网站视频免费观看 | 免费a漫 - 禁密天堂 | 狠狠色婷婷狠狠狠亚洲综合 | 99草视频 | 亚洲国产精品网站久久 | 日本天堂影院在线播放 | 亚洲六月丁香六月婷婷色伊人 | 亚洲精品第二页 | 蘑菇香蕉茄子绿巨人丝瓜草莓 | 国产私拍精品88福利视频 | 国产99er66在线视频 | 欧美成人在线影院 | 11 13加污女qq看他下面 | 精品国产欧美一区二区三区成人 | 日本在线观看a | 果冻传媒天美传媒乌鸦传媒 | ai换脸造梦jennie | 动漫美女人物被黄漫在线看 | 国产成人精品999在线 | 亚洲精品一区在线观看 | 91精品国产高清久久久久久 | 精品国产乱码久久久久久人妻 | 国产成人精视频在线观看免费 | 亚洲精品国产综合久久一线 | 免费亚洲视频 | 99pao在线视频精品免费 | 500福利第一导航 | 免费的网址 |