定義:將對象組合成樹形結構以表示“部分-整體”的層次結構,組合模式使得用戶對單個對象和組合對象的使用具有一致性。
代碼:
package composite_model;
import java.util.ArrayList;
/**
* @author naivor
* 組合模式-場景類
*/
public class CompositeModel {
public static void main(String[] args) {
Component root=new Composite("root"); //長出根節點
root.addComponent(new Leaf("leaf A")); //根節點長出葉A
Component compositeB=new Composite("composite B");
root.addComponent(compositeB); //根節點長出枝節點B
compositeB.addComponent(new Leaf("leaf AA")); //枝節點B長出葉AA
Component componentBB=new Composite("composite BB");
compositeB.addComponent(componentBB); //枝節點B長出枝節點BB
root.operate();
}
}
/**
*
* @author naivor
* 組合模式-節點抽象類
*/
abstract class Component {
private String name;
public Component() {
}
public Component(String name) {
this.name = name;
}
public void addComponent(Component component) {
};
public void removeComponent(Component component) {
};
public abstract void operate();
}
/**
*
* @author naivor
* 組合模式-葉節點類
*/
class Leaf extends Component {
public Leaf() {
}
public Leaf(String name) {
super(name);
}
@Override
public void operate() {
//葉節點的業務邏輯
}
}
/**
*
* @author naivor
* 組合模式-枝節點類
*/
class Composite extends Component {
private ArrayList<Component> coms=new ArrayList<Component>();
public Composite() {
}
public Composite(String name) {
super(name);
}
@Override
public void addComponent(Component component) {
coms.add(component);
}
@Override
public void removeComponent(Component component) {
coms.remove(component);
}
@Override
public void operate() {
for (Component component : coms) {
component.operate();
}
//枝節點的業務邏輯
}
}