一、什么是建造者模式
Builder模式也叫建造者模式或者生成器模式, 是由GoF提出的23种设计模式中的一种。
Builder模式是一种对象创建型模式之一,用来 隐藏复合对象的创建过程,它把复合对象的创建 过程加以抽象,通过子类继承和重载的方式,动 态地创建具有复合属性的对象。
二、建造者模式的结构
三、建造者模式应用场景
- 对象的创建:Builder模式是为对象的创建而设计的模式
- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象
- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法
房子
1 /* 2 * 房子 3 */ 4 public class House { 5 // 地板 6 private String floor; 7 // 墙 8 private String wall; 9 // 屋顶 10 private String housetop; 11 12 public String getFloor() { 13 return floor; 14 } 15 16 public void setFloor(String floor) { 17 this.floor = floor; 18 } 19 20 public String getWall() { 21 return wall; 22 } 23 24 public void setWall(String wall) { 25 this.wall = wall; 26 } 27 28 public String getHousetop() { 29 return housetop; 30 } 31 32 public void setHousetop(String housetop) { 33 this.housetop = housetop; 34 } 35 }
工程队
1 /* 2 * 工程队 3 */ 4 public interface HouseBuilder { 5 //修地板 6 public void makeFloor(); 7 //修墙 8 public void makeWall(); 9 //修屋顶 10 public void makeHousetop(); 11 public House getHouse(); 12 }
平房工程队 实现工程队
1 /* 2 * 平房工程队 3 */ 4 public class PingFangBuilder implements HouseBuilder { 5 House house = new House(); 6 7 public void makeFloor() { 8 house.setFloor("平房-->地板"); 9 } 10 11 public void makeHousetop() { 12 house.setHousetop("平房-->房顶"); 13 } 14 15 public void makeWall() { 16 house.setWall("平房-->墙"); 17 } 18 19 public House getHouse() { 20 return house; 21 } 22 }
测试
1 public class MainClass { 2 3 public static void main(String[] args) { 4 // //客户直接造房子 5 // House house = new House(); 6 // house.setFloor("地板"); 7 // house.setWall("墙"); 8 // house.setHousetop("屋顶"); 9 10 11 //由工程队来修 12 HouseBuilder builder = new GongyuBuilder(); 13 //设计者来做 14 HouseDirector director = new HouseDirector(); 15 director.makeHouse(builder); 16 17 House house = builder.getHouse(); 18 System.out.println(house.getFloor()); 19 System.out.println(house.getWall()); 20 System.out.println(house.getHousetop()); 21 } 22 }
设计
1 //设计者 2 public class HouseDirector { 3 4 public void makeHouse(HouseBuilder builder) { 5 builder.makeFloor(); 6 builder.makeWall(); 7 builder.makeHousetop(); 8 } 9 }
公寓工程队 实现工程队
1 //公寓建造者 2 public class GongyuBuilder implements HouseBuilder{ 3 House house = new House(); 4 5 public House getHouse() { 6 return house; 7 } 8 9 public void makeFloor() { 10 house.setFloor("公寓-->地板"); 11 } 12 13 public void makeHousetop() { 14 house.setHousetop("公寓-->房顶"); 15 } 16 17 public void makeWall() { 18 house.setWall("公寓-->墙"); 19 } 20 }