一,什么是建造者模式
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。
二,例子
四个要素
产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。
抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
具体建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。
导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。
具体产品类House:
/** * * @类名称:House * @类描述:具体产品 * @创建人:zender */ public class House { // 地板 private String floor; // 墙 private String wall; // 屋顶 private String housetop; public String getFloor() { return floor; } // get/set忽略 }
抽象建造者Builder:
/** * * @类名称:HouseBuilder * @类描述:抽象建造者Builder * @创建人:zender */ public interface HouseBuilder { //修地板 public void makeFloor(); //修墙 public void makeWall(); //修屋顶 public void makeHousetop(); public House getHouse(); }
具体建造者Builder:
/** * * @类名称:GongyuBuilder * @类描述:具体建造者Builder * @创建人:zender */ public class GongyuBuilder implements HouseBuilder { House house = new House(); public House getHouse() { return house; } public void makeFloor() { house.setFloor("公寓-->地板"); } public void makeHousetop() { house.setHousetop("公寓-->房顶"); } public void makeWall() { house.setWall("公寓-->墙"); } }
导演类Director:
/** * * @类名称:HouseDirector * @类描述:导演类Director * @创建人:zender */ public class HouseDirector { public void makeHouse(HouseBuilder builder) { builder.makeFloor(); builder.makeWall(); builder.makeHousetop(); } }
测试类:
public class Test { public static void main(String[] args) { //由工程队来修房子 HouseBuilder builder = new GongyuBuilder(); //设计者来做设计 HouseDirector director = new HouseDirector(); director.makeHouse(builder); House house = builder.getHouse(); System.out.println(house.getFloor()); System.out.println(house.getWall()); System.out.println(house.getHousetop()); } }
结果:
三、建造者模式应用场景
- 对象的创建
Builder模式是为对象的创建而设计的模式
- 创建的是一个复合对象
创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
四,使用建造者模式的好处
1,使用建造者模式可以使客户端不必知道产品内部组成的细节。
2,具体的建造者类之间是相互独立的,对系统的扩展非常有利。
3,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
来源:https://www.cnblogs.com/Zender/p/7357314.html