一、建造者设计模式就如同生活中建造房子一样,需要建筑公司(设计者)、图纸(抽象建造者)、工人(具体建造者),这三个主要的角色,其中工人(具体建造者)需要持有房子(room)的引用,而图纸(抽象建造者)需要持有一个工人的引用。
二、图纸(抽象建造者)的代码:
/** * 抽象建造者(图纸) * 工人接口,定义了各个工人所需要进行的工作 * 并不负责具体的建造 */ public interface Build { public void makeWindow(); public void makeFloor(); //需要返回一个房子的对象 public Room build(); }
三、具体房子(room的代码):
public class Room { private String window; private String floor; public String getWindow() { return window; } public void setWindow(String window) { this.window = window; } public String getFloor() { return floor; } public void setFloor(String floor) { this.floor = floor; } @Override public String toString() { return "Room{" + "window='" + window + '\'' + ", floor='" + floor + '\'' + '}'; } }
四、工人(具体建造者)需要持有房子的引用:
public class WorkBuilder implements Build { private Room room = new Room(); @Override public void makeWindow() { room.setWindow("建造窗户"); } @Override public void makeFloor() { room.setFloor("建造地板"); } @Override public Room build() { return room; } }
五、建造公司(设计者),它的能力包含了具体工人的能力:
/** * 设计者 * 他知道房子怎么设计 * 他会指挥工人去建造 */ public class Designer { public Room build(Build build) { build.makeWindow(); build.makeFloor(); return build.build(); } }
六、客户端的调用:
public class Client { @Test public void test() { Build worker = new WorkBuilder(); Designer designer = new Designer(); Room room = designer.build(worker); System.out.print(room); } }以上步骤就是一个简单的建造者设计模式的框架,github代码下载地址:https://github.com/cWX411904/Builder