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