建造者模式(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();
}
}