1、建造者模式简述
建造者模式是将一个复杂的对戏的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。它强调的是一步步创建对象,一般来说,建造者模式中对象不是直接返回的。
通常来说,建造者模式包括下面几个角色:
(1)Builder:抽象接口,用来规范产品对象的各个组成部分的建造。这个接口规定要实现复杂对象的那些部分的创建,并不涉及具体对象部件的创建。
(2)ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分创建。在建造过程完成后,提供产品的实例。
(3)Director:调用具体建造者来创建复杂对象的哥哥部分,在Director中不涉及具体产品的信息,只负责保证对象各部分完整创建或者按照某种顺序创建。
(4)Product:要创建的复杂对象
2、UML类图
3、实现例子
这里以建造屋子为例。
/**
* 产品,房屋
*/
@Getter
@Setter
public class Product {
private String basic;
private String wall;
private String roof;
@Override
public String toString() {
return "Product{" +
"basic='" + basic + '\'' +
", wall='" + wall + '\'' +
", roof='" + roof + '\'' +
'}';
}
}
/**
* 建造接口
*/
public interface Builder {
void buildBasic();
void buildWalls();
void buildRoof();
Product buildProduct();
}
/**
* 具体房屋建造者
*/
public class ConcreteBuilder implements Builder {
private Product product;
public ConcreteBuilder() {
product = new Product();
}
@Override
public void buildBasic() {
product.setBasic("stone basic");
}
@Override
public void buildWalls() {
product.setWall("stone wall");
}
@Override
public void buildRoof() {
product.setRoof("stone roof");
}
@Override
public Product buildProduct() {
return product;
}
}
public class Director {
public Product constructProduct(ConcreteBuilder concreteBuilder){
concreteBuilder.buildBasic();
concreteBuilder.buildWalls();
concreteBuilder.buildRoof();
return concreteBuilder.buildProduct();
}
public static void main(String[] args) {
Product product = new Director().constructProduct(new ConcreteBuilder());
System.out.println(product.toString());
}
}