设计模式——建造者模式
一、什么是建造者模式
Builder模式也叫建造者模式或者生成器模式, 是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来 隐藏复合对象的创建过程,它把复合对象的创建 过程加以抽象,通过子类继承和重载的方式,动 态地创建具有复合属性的对象。
二、建造者模式的结构
三、建造者模式应用场景
- 对象的创建:Builder模式是为对象的创建而设计的模式
- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象
- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法
代码如下:
package 建造者模式; public class House { String wall; String wallTap; String floor; public String getWall() { return wall; } public void setWall(String wall) { this.wall = wall; } public String getWallTap() { return wallTap; } public void setWallTap(String wallTap) { this.wallTap = wallTap; } public String getFloor() { return floor; } public void setFloor(String floor) { this.floor = floor; } }
package 建造者模式; public interface HoseBuild { void modifyWall(); void modiFloor(); void modifyWallTop(); House getResult(); }
package 建造者模式; public class HouseDirector { public void buildHouse(HoseBuild hoseBuild){ hoseBuild.modiFloor(); hoseBuild.modifyWall(); hoseBuild.modifyWallTop(); } }
package 建造者模式; public class pingHouseBuilder implements HoseBuild { House house = new House(); @Override public void modifyWall() { house.setWall("平房-墙"); } @Override public void modiFloor() { house.setFloor("平房-地板"); } @Override public void modifyWallTop() { house.setWallTap("平房-墙顶"); } @Override public House getResult() { return house; } }
package 建造者模式; public class villaHouse implements HoseBuild { House house = new House(); @Override public void modifyWall() { house.setWall("别墅-墙"); } @Override public void modiFloor() { house.setFloor("别墅-地板"); } @Override public void modifyWallTop() { house.setWallTap("别墅-房顶"); } @Override public House getResult() { return house; } }
package 建造者模式; public class TestDemo { public static void main(String[] args) { //调用对应工程队 //HoseBuild hoseBuild = new pingHouseBuilder(); HoseBuild hoseBuild = new villaHouse(); // 设计师负责修建 HouseDirector houseDirector = new HouseDirector(); houseDirector.buildHouse(hoseBuild); // 得到最终结果 House house = hoseBuild.getResult(); System.out.println(house.getFloor()); System.out.println(house.getWall()); System.out.println(house.getWallTap()); } }