设计模式(四)建造者模式
定义:
建造者模式或者生成器模式(Builder),是由GoF提出的23种设计模式中的一种。
Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。
结构:

应用场景
-
对象的创建:Builder模式是为对象的创建而设计的模式。
-
创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象。
-
关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法。
举例
-
有这么一个普通的House类,一般情况下我们会让客户直接new出一个对象,然后再通过set属性的方法进行造房子,但这样会把所有实现的细节全都暴露给客户,由客户对房子进行修饰,这样会有一个问题,有时候我们并不想让实现细节暴露出来,因此,就要引入了建造者模式。
/房子对象/
public class House {
// 地板
private String floor;
// 墙
private String wall;
// 屋顶
private String housetop;public String getFloor() {
return floor;
}public void setFloor(String floor) {
this.floor = floor;
}public String getWall() {
return wall;
}public void setWall(String wall) {
this.wall = wall;
}public String getHousetop() {
return housetop;
}public void setHousetop(String housetop) {
this.housetop = housetop;
}}
//客户直接造房子
House house = new House();
house.setFloor("地板");
house.setWall("墙");
house.setHousetop("屋顶"); -
使用建造者模式对对象进行装饰:
-
Concrete对象:抽象的工程队,可以完成一系列的操作。
/* 工程队*/
public interface HouseBuilder {
// 修地板
public void makeFloor();// 修墙
public void makeWall();// 修屋顶
public void makeHousetop();// 获取对象
public House getHouse();
} -
Builder:
/公寓工程队/
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("公寓-->墙");
}}
/平房工程队/
public class PingFangBuilder implements HouseBuilder {
House house = new House();public void makeFloor() {
house.setFloor("平房-->地板");
}public void makeHousetop() {
house.setHousetop("平房-->房顶");
}public void makeWall() {
house.setWall("平房-->墙");
}public House getHouse() {
return house;
}}
-
Director:设计者,对屋子进行构建。
public class HouseDirector {
public void makeHouse(HouseBuilder builder) {
builder.makeFloor();
builder.makeWall();
builder.makeHousetop();
}}
-
MainClass:
public class MainClass {
public static void main(String[] args) {
// 设计者来设计屋子
HouseDirector director = new HouseDirector();
// 由工程队来修
HouseBuilder builder = new PingFangBuilder();
// HouseBuilder builder = new GongyuBuilder();
director.makeHouse(builder);House house = builder.getHouse();
System.out.println(house.getFloor());
System.out.println(house.getWall());
System.out.println(house.getHousetop());
}}
-
在Main方法中可以看到,在构建对象的时候,客户不需要对数据进行细节操作,只需要创建出工程队和设计者,设计者会将所有操作交给工程队来做,我们只需要一个想要实现的工程队即可,它会给我们创建出相应的对象。

浙公网安备 33010602011771号