Java面試之設計模式(2)建造者模式

建造者模式(Builder Pattern)

多個簡單對象在一起構建負責對象,類似於多個建築工人在一起建設房屋,每一個建築工人都有各自負責的工作,我們可以根據需要房屋的不用調用不同的建築工人去構建房屋。

在程序中一個複雜對象可以由多個簡單對象構建,將一個複雜的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。壞處是代碼量增加

建造者模式中主要成員有兩個,一是建造者,二是組織者

代碼如下:首先創建建造者

/**
 * 工人類
 */
public abstract class Worker {
	// 每個工人都要工作
	public abstract void work();
}

/**
 * 木匠類
 */
public class Carpenter extends Worker {
	@Override
	public void work() {
		System.out.println("木匠做木頭");
	}
}

/**
 *	電工
 */
public class Electrician extends Worker {
	@Override
	public void work() {
		System.out.println("電工裝修電路");
	}
}

/**
 *	粉刷匠
 */
public class Whitewasher extends Worker {
	@Override
	public void work() {
		System.out.println("粉刷匠刷牆");
	}
}

然後創建組織類

public class Workers {

	private List<Worker> list = new ArrayList<>();
	
	public void addWorker(Worker worker) {
		list.add(worker);
	}
	
	public void doWork() {
		for (Worker worker : list) {
			// 建造者開始工作
			worker.work();
		}
	}
}

/**
 *	根據需求創建合適隊伍
 *	導演者
 */
public class WorkersBuilder {

	public Workers createW1() {
		Workers w = new Workers();
		w.addWorker(new Carpenter());	// 加入木匠
		w.addWorker(new Electrician()); // 加入電工
		return w;
	}
	
	/*public Workers createW2() {
		Workers w = new Workers();
		// 加入其他工匠
		return w;
	} */
	
}

測試類如下

public class Test {
	public static void main(String[] args) {
		WorkersBuilder wb = new WorkersBuilder();
		
		Workers w = wb.createW1();
		w.doWork();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章