06建造者模式Builder
阿新 • • 發佈:2018-05-13
ring print make 子類 oid direct director private 什麽
一、什麽是建造者模式
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 publicvoid 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 }
06建造者模式Builder