組合模式
組合模式是結構型對象模式的一個實例,它描述瞭如何構造一個類層次式結構,這一結構由兩種類型的對象(基元對象和組合對象)所對應的類構成,其中的組合對象使得你可以組合基元對象以及其他的組合對象,從而形成任意複雜的結構。
定義
將對象組合成樹形結構以表示“部分-整體”的層次結構,組合模式使得用戶單個對象和組合對象的使用具有一致性。
使用場景
你想表示對象的部分-整體層次結構
你希望用戶忽略組合對象與單個對象的不同,用戶將統一地使用組合結構中的所有對象。
結構
實現
public abstract class Component {
public abstract void operation();
public abstract void add(Component component);
public abstract void remove(Component component);
public abstract Component getChild(int index);
}
public class Composite extends Component{
private List<Component> children = new ArrayList<Component>();
@Override
public void operation() {
System.out.println("Composite's operation");
}
@Override
public void add(Component component) {
children.add(component);
}
@Override
public void remove(Component component) {
children.remove(component);
}
@Override
public Component getChild(int index) {
return children.get(index);
}
}
public class Leaf extends Component{
@Override
public void operation() {
System.out.println("Leaf's operation");
}
@Override
public void add(Component component) {
System.out.println("Can not add to a leaf");
}
@Override
public void remove(Component component) {
System.out.println("Can not remove from a leaf");
}
@Override
public Component getChild(int index) {
return null;
}
}
組合模式常用於樹形結構比如文件系統,二叉樹,目錄之類的,能夠簡化客戶代碼,而且能夠很容易地添加新類型的組件