第十一篇 設計模式--組合模式

定義:將對象組合成樹形結構以表示“部分-整體”的層次結構,組合模式使得用戶對單個對象和組合對象的使用具有一致性。

代碼:

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();
		}
		//枝節點的業務邏輯
	}
	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章