建造者模式介绍
当我们要构建一个对象,但是,这个对象的属性多如牛毛,如果我们在不了解所有属性的情况下,无法通过构造方法创建出这个对象—如果要“按需创建”,那么就要有多种构造方法的重载。于是,建造者模式应运而生,它实现了复杂对象的构建与表示的分离。
建造者模式样例
House是我们要建造的对象,它包含florr,wall,roof与其他一些列属性。
public class House {
private String floor;
private String wall;
private String roof;
private String otherFiled1;
private String otherFiled2;
//getter setter...
}
建造者接口定义:
public interface HouseBuilder {
public HouseBuilder setFloor(); //地板
public HouseBuilder setWall(); //墙
public HouseBuilder setRoof(); //房顶
public HouseBuilder setOtherFiled1();
public HouseBuilder setOtherFiled2();
public House build(); //返回建造的房子
}
确切的房子建造者:
public class ConcreteHouseBuilder implements HouseBuilder {
House house = new House();
@Override
public HouseBuilder setFloor() {
house.setFloor("floor");
return this;
}
@Override
public HouseBuilder setWall() {
house.setWall("wall");
return this;
}
@Override
public HouseBuilder setRoof() {
house.setRoof("roof");
return this;
}
@Override
public HouseBuilder setOtherFiled1() {
house.setOtherFiled1("filed1");
return this;
}
@Override
public HouseBuilder setOtherFiled2() {
house.setOtherFiled1("filed2");
return this;
}
@Override
public House build() {
return house;
}
}
接下来,就要按需构建出一个房子了,我们只需要设置我们需要的属性。
即使我们不知道其他属性如何设置,也可以正常创建对象。
public static void main(String[] args) {
ConcreteHouseBuilder concreteHouseBuilder = new ConcreteHouseBuilder();
House house = concreteHouseBuilder.setFloor().setWall().setRoof().build();
}