編輯:關於android開發
組合模式也稱為部分-整體模式,結構型設計模式之一。
將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。
(1)表示對象的部分-整體層次結構時。
(2)從一個整體中能夠獨立出部分模塊或功能的場景。
(1)Component
:抽象根節點,為組合中的對象聲明接口。在適當的情況下,實現所有類共有接口的缺省行為。聲明一個接口用於訪問和管理Component的子節點。可在遞歸結構中定義一個接口,用於訪問一個父節點,並在合適的情況下實現它。
(2)Composite
:定義有子節點的那些枝干節點行為,存儲子節點,在Component接口中實現與子節點有關的操作。
(3)Leaf
:在組合中表示葉子節點對象,葉子節點沒有子節點,在組合中定義節點對象的行為。
(4)Client
:通過Component接口操縱組合節點的對象。
如圖這種將組合所使用的方法全部定義在抽象類的方式稱為透明的組合模式,如果將Component中的Add、Remove、GetChild去除,只在Composite中單獨添加,這種方式稱為安全的組合模式。然而後者違背了依賴倒置原則。
以文件和文件夾這樣的文件系統為例
文件和文件夾的抽象類:(Component)
public abstract class Dir {
/**
* 聲明一個List成員變量來儲存文件夾下的所有元素
*/
protected List
表示文件夾的類:(Composite)
public class Folder extends Dir{
public Folder(String name) {
super(name);
}
@Override
public void addDir(Dir dir) {
dirs.add(dir);
}
@Override
public void rmDir(Dir dir) {
dirs.remove(dir);
}
@Override
public void clear() {
dirs.clear();
}
@Override
public void print() {
System.out.print(getName() + "(");
Iterator
表示文件夾的類:(Leaf)
public class File extends Dir{
public File(String name) {
super(name);
}
@Override
public void addDir(Dir dir) {
throw new UnsupportedOperationException("文件對象不支持該操作!");
}
@Override
public void rmDir(Dir dir) {
throw new UnsupportedOperationException("文件對象不支持該操作!");
}
@Override
public void clear() {
throw new UnsupportedOperationException("文件對象不支持該操作!");
}
@Override
public void print() {
System.out.print(getName());
}
@Override
public List
客戶類:
public class Client {
public static void main(String[] args) {
//構造一個目錄對象表示C盤根目錄
Dir diskC = new Folder("C");
//C盤根目錄下有一個文件Log.txt
diskC.addDir(new File("Log.txt"));
//C盤根目錄下有三個目錄Windows、PerfLogs、Program File
Dir dirWin = new Folder("Windows");
//Windows目錄下有文件explorer.exe
dirWin.addDir(new File("explorer.exe"));
diskC.addDir(dirWin);
//PerfLogs目錄
Dir dirPer = new Folder("PerfLogs");
//PerfLogs目錄下有文件null.txt
dirPer.addDir(new File("null.txt"));
diskC.addDir(dirPer);
//Program File目錄
Dir dirPro = new Folder("Program File");
//Program File目錄下有文件ftp.txt
dirPro.addDir(new File("ftp.txt"));
diskC.addDir(dirPro);
//打印出文件結構
diskC.print();
}
}
結果:
C(Log.txt, Windows(explorer.exe), PerfLogs(null.txt), Program File(ftp.txt))
View和ViewGroup的結構很像上面的UML類圖,不過View的視圖層級使用的是安全的組合模式。ViewGroup有對View的addView、removeView、getChildAt等方法,想必大家也很熟悉。
(1)組合模式可以清楚地定義分層次的復雜對象,表示對象的全部或部分層次,他讓高層模塊忽略了層次的差異,方便對整個層次結構進行控制。
(2)簡化了高層模塊的代碼。
(3)在組合模式中增加新的枝干構件和葉子構件都很方便,無須對現有類庫進行修改,符合“開閉原則”。
(4)對樹形結構的控制變得簡單。
組合模式不容易限制組合中的構件。因為大多數情況下,它們都來自於相同的抽象層,此時,必須進行類型檢查來實現,這個實現過程較為復雜。
Android性能優化之常見的內存洩漏 前言 對於內存洩漏,我想大家在開發中肯定都遇到過,只不過內存洩漏對我們來說並不是可見的,因為它是在堆中活動,而要想檢測程序中是
Android 掃描條形碼(Zxing插件),androidzxing使用Android Studio 一、在build.gradle(Module:app)添加代碼 &
語音識別是一項讓人感興趣的功能,而且它是語音搜索等功能的基礎,Android開
簡單回調機制的基本建立,簡單回調機制建立簡單回調機制的建立主要分為下面幾步: 1.寫一個回調類,寫出需要的構造方法 2.定義一個接口,裡面寫一個抽象方法,方法體(Stri
【React Native開發】React Native控件之Drawe