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

23種設(shè)計(jì)模式(10)java組合模式

 更新時(shí)間:2021年11月08日 08:36:47   作者:阿木俠  
這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java組合模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

23種設(shè)計(jì)模式第四篇:java組合模式

介紹

組合模式又叫做部分-整體模式,它使我們樹型結(jié)構(gòu)的問題中,模糊了簡單元素和復(fù)雜元素的概念,客戶程序可以向處理簡單元素一樣來處理復(fù)雜元素,從而使得客戶程序與復(fù)雜元素的內(nèi)部結(jié)構(gòu)解藕.

組合模式可以優(yōu)化處理遞歸或分級(jí)數(shù)據(jù)結(jié)構(gòu).有許多關(guān)于分級(jí)數(shù)據(jù)結(jié)構(gòu)的例子,使得組合模式非常有用武之地.

類圖

組成部分:

Component: 為參加組合的對象聲明一個(gè)公共接口, 不管是組合還是葉結(jié)點(diǎn).
Leaf: 在組合中表示葉子結(jié)點(diǎn)對象,葉子結(jié)點(diǎn)沒有子結(jié)點(diǎn).
Composite: 表示參加組合的有子對象的對象, 并給出樹枝購件的行為.

實(shí)例

FolderComponent

public abstract class FolderComponent {
 private String name;

 public String getName() {
 return name;
 }

 public void setName(final String name) {
 this.name = name;
 }

 public FolderComponent() {
 }

 public FolderComponent(final String name) {
 this.name = name;
 }

 public abstract void add(FolderComponent component);

 public abstract void remove(FolderComponent component);

 public abstract void display();
}

FileLeaf

public class FileLeaf extends FolderComponent {
 public FileLeaf(final String name) {
 super(name);
 }

 @Override
 public void add(final FolderComponent component) {
 // ...
 }

 @Override
 public void remove(final FolderComponent component) {
 // ...
 }

 @Override
 public void display() {
 System.out.println("FileLeaf:" + this.getName());
 }
}

FolderComposite

public class FolderComposite extends FolderComponent {
 private final List<FolderComponent> components;

 public FolderComposite(final String name) {
 super(name);
 this.components = new ArrayList<FolderComponent>();
 }

 public FolderComposite() {
 this.components = new ArrayList<FolderComponent>();
 }

 @Override
 public void add(final FolderComponent component) {
 this.components.add(component);
 }

 @Override
 public void remove(final FolderComponent component) {
 this.components.remove(component);
 }

 @Override
 public void display() {
 System.out.println("FolderComposite---name:" + this.getName());
 for (final FolderComponent component : components) {
  System.out.println("FolderComposite---component-name:" + component.getName());
 }
 }
}

Client

public class Client
{
 public static void main(final String[] args)
 {
  final FolderComponent leaf = new FileLeaf("runnable file");
  leaf.display();

  final FolderComponent folder = new FolderComposite("new folder");
  folder.add(new FileLeaf("content1 in new folder"));
  folder.add(new FileLeaf("content2 in new folder"));
  folder.display();
 }
}

輸出結(jié)果:

FileLeaf:runnable file
FolderComposite---name:new folder
FolderComposite---component-name:content1 in new folder
FolderComposite---component-name:content2 in new folder

使用場景

以下情況下適用Composite模式:

        1、你想表示對象的部分-整體層次結(jié)構(gòu)
        2、你希望用戶忽略組合對象與單個(gè)對象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對象。

總結(jié)

        組合模式解耦了客戶程序與復(fù)雜元素內(nèi)部結(jié)構(gòu),從而使客戶程序可以向處理簡單元素一樣來處理復(fù)雜元素。
        如果你想要?jiǎng)?chuàng)建層次結(jié)構(gòu),并可以在其中以相同的方式對待所有元素,那么組合模式就是最理想的選擇。本章使用了一個(gè)文件
        系統(tǒng)的例子來舉例說明了組合模式的用途。在這個(gè)例子中,文件和目錄都執(zhí)行相同的接口,這是組合模式的關(guān)鍵。通過執(zhí)行相同的接口,你就可以用相同的方式對待文件和目錄,從而實(shí)現(xiàn)將文件或者目錄儲(chǔ)存為目錄的子級(jí)元素。

轉(zhuǎn)自:java知音

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

相關(guān)文章

最新評論

葫芦岛市| 吉林省| 梁山县| 禄劝| 永清县| 临邑县| 萨迦县| 开远市| 灵宝市| 庆安县| 湟中县| 江安县| 南通市| 乃东县| 友谊县| 沈阳市| 南川市| 扬州市| 越西县| 新乐市| 安塞县| 通榆县| 桦川县| 赞皇县| 宁明县| 巴青县| 孙吴县| 雅江县| 元江| 太仆寺旗| 美姑县| 连云港市| 武城县| 井陉县| 扎兰屯市| 兴安县| 前郭尔| 孟连| 冀州市| 南京市| 平潭县|