編輯:關於Android編程
組合模式也稱為部分-整體模式,結構型設計模式之一。
將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。
(1)表示對象的部分-整體層次結構時。
(2)從一個整體中能夠獨立出部分模塊或功能的場景。
(1)Component
:抽象根節點,為組合中的對象聲明接口。在適當的情況下,實現所有類共有接口的缺省行為。聲明一個接口用於訪問和管理Component的子節點。可在遞歸結構中定義一個接口,用於訪問一個父節點,並在合適的情況下實現它。
(2) 以文件和文件夾這樣的文件系統為例 文件和文件夾的抽象類:(Component) 表示文件夾的類:(Composite) 表示文件夾的類:(Leaf) 客戶類: 結果: View和ViewGroup的結構很像上面的UML類圖,不過View的視圖層級使用的是安全的組合模式。ViewGroup有對View的addView、removeView、getChildAt等方法,想必大家也很熟悉。 (1)組合模式可以清楚地定義分層次的復雜對象,表示對象的全部或部分層次,他讓高層模塊忽略了層次的差異,方便對整個層次結構進行控制。 (2)簡化了高層模塊的代碼。 (3)在組合模式中增加新的枝干構件和葉子構件都很方便,無須對現有類庫進行修改,符合“開閉原則”。 (4)對樹形結構的控制變得簡單。 組合模式不容易限制組合中的構件。因為大多數情況下,它們都來自於相同的抽象層,此時,必須進行類型檢查來實現,這個實現過程較為復雜。CompZ喎?/kf/ware/vc/" target="_blank" class="keylink">vc2l0ZTwvY29kZT6jurao0uXT0NfTvdq147XExMfQqdamuMm92rXj0NDOqqOstOa0otfTvdq146Os1NpDb21wb25lbnS907/a1tDKtc/W0+vX073atePT0LnYtcSy2df3oaM8L3A+DQo8cD6jqDOjqTxjb2RlPkxlYWY8L2NvZGU+o7rU2tfpus/W0LHtyr7SttfTvdq147bUz/OjrNK219O92rXjw7vT0NfTvdq146Os1NrX6brP1tC2qNLlvdq147bUz/O1xNDQzqqhozwvcD4NCjxwPqOoNKOpPGNvZGU+Q2xpZW50PC9jb2RlPqO6zai5/UNvbXBvbmVudL3Tv9qy2dfd1+m6z73ateO1xLbUz/OhozwvcD4NCjxibG9ja3F1b3RlPg0KCTxwPsjnzbzV4tbWvavX6brPy/nKudPDtcS3vbeoyKuyv7ao0uXU2rPpz/PA4LXEt73KvbPGzqo8c3Ryb25nPs24w/e1xNfpus/Eo8q9PC9zdHJvbmc+o6zI57n7vatDb21wb25lbnTW0LXEQWRkoaJSZW1vdmWhokdldENoaWxkyKWz/aOs1rvU2kNvbXBvc2l0ZdbQtaW2wMztvNOjrNXi1ta3vcq9s8bOqjxzdHJvbmc+sLLIq7XE1+m6z8Sjyr08L3N0cm9uZz6ho8i7tvi689XfzqWxs8HL0sDAtbW51sPUrdTyoaM8L3A+DQo8L2Jsb2NrcXVvdGU+DQo8aDIgaWQ9"4簡單實現">4.簡單實現
public abstract class Dir {
/**
* 聲明一個List成員變量來儲存文件夾下的所有元素
*/
protected List
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
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))
5.Android源碼中的模式實現
1.View和ViewGroup的嵌套組合
6.總結
1.優點
2.缺點
開門見山:這裡給出rk 在cameraHAL層的camera數據結構:typedef struct FramInfo{ int phy_addr; int v
首先看下效果圖布局文件:<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android
在web頁面中,有a標簽的超鏈接實現跳轉,同樣在Android當中,用TextView控件來顯示文字,實現它的事件來跳轉。用過微博Android手機端的朋友的都知道微博正
Android開放的平台,獲得高度自由度,用戶也要承受系統當中一些潛在的問題,比如後台流量的消耗。那麼怎樣才能有效控制Android的流量使用呢?下面這5個