GoF設計模式 組合模式

2021-09-28 11:40:43 字數 1932 閱讀 1458

組合模式(重要):

結構型模式,又叫整體-部分模式,將葉子物件與容器物件遞迴組合,使得使用者在使用時無須區別,可以一致地使用葉子物件和容器物件。

葉子物件:只能作為普通物件適用

容器物件:既能作為普通物件,又可作為其他物件的容器,提供乙個整合儲存子節點

組合模式的角色:抽象類或介面(是葉子類和容器類的父類),葉子類,容器類

安全組合模式:在抽象父類中僅定義葉子類與容器類共有的方法,缺點是不夠透明,使用者不能夠完全一致使用葉子類和容器類,不能完全面向抽象程式設計,在實際使用中,安全組合模式使用頻率較高

透明組合模式:在抽象父類中定義葉子類和容器類的所有方法,使使用者一致地使用它們,缺點是不安全,在呼叫葉子類中沒有的方法時需要丟擲異常

組合模式的適用場景:

1.樹形結構的開發

2.對於具有整體與部分的層次結構中,想要一致地使用它們

組合模式的優點:

1.一致地使用葉子和容器物件,簡化了客戶端**

2.可以組合形成複雜的樹形結構,方便地對層次進行控制

組合模式的缺點:

1.設計變得更加抽象

2.增加新的類時會有問題,難以對特定型別的類進行限制約束

組合模式的例子(檔案和資料夾組合,安全組合模式)

抽象父類

public abstract class absfileandfolder
葉子類(檔案類)

public class file extends absfileandfolder

/*** @description: todo

* @author doudou

* @date 2023年10月10日

* @throws

* @return

* @see structual.compositepattern.absfileandfolder#printfilename()

*/ @override

public void printfilename()

}

容器類(資料夾類)

public class folder extends absfileandfolder

/*** @description: 列印檔案名字

* @author doudou

* @date 2023年10月10日

* @throws

* @return

* @see structual.compositepattern.absfileandfolder#printfilename()

*/ @override

public void printfilename() }

/***

* @description: 新增

* @author doudou

* @date 2023年10月10日

* @param absfileandfolder

* @throws

* @return

*/public void add(absfileandfolder absfileandfolder)

/***

* @description: 刪除

* @author doudou

* @date 2023年10月10日

* @param absfileandfolder

* @throws

* @return

*/public void remove(absfileandfolder absfileandfolder)

}

測試類

public class main 

}

組合模式的應用:

1.xml文件的解析

2.作業系統中對檔案和資料夾的操作

設計模式之GOF23組合模式

組合模式composite 使用組合模式的場景 把部分和整體的關係用樹形結構表示,從而使客戶端可以使用統一的方式處理物件和整體物件 檔案和資料夾 組合模式核心 抽象構件 component 角色 定義了葉子和容器的共同點 葉子 leaf 構件角色 無子節點 容器 composite 構件角色 有容器...

GoF結構型模式 組合模式

常常有一些元件在內部具有特定的資料結構,如果讓客戶依賴這些特定的資料結構,將極大地破壞元件的復用。這時候,將這些特定的資料結構封裝在內部,在外部提供同一的介面,來實現與特定資料結構無關的訪問,是一 種行之有效的解決方案。將物件組合成樹形結構以表示 部分 整體 的層次結構。composite使得使用者...

Gof《設計模式》完結

設計模式一到二十都是gof 設計模式 內容的總結,並使用php說明實現,gof 設計模式 提到的 都是c 舉例也不是特別典型。這些內容很早之前都已經總結了,現在重新把word筆記整理,算是溫故而知新吧。一些地方描述可能有誤,在往後的更多實踐經驗來進一步的修改。目前我在開發專案的框架裡面,使用的模式有...