定义:
建造者模式,又叫生成器模式,它的核心思想是 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
类图:
建造者模式的几个角色:
产品(product):需要组装的具体产品,内部存在自己的属性和特诊。
抽象建造(Builder):对产品部件进行加工,对产品进行组建。可以是抽象类,也可以是接口。
具体建造(ConcreteBuilder):抽象建造的实现。
导演类(Director):建造者~
撸代码
产品(product):
public class Product {
private String packing;
private String entry;
public String getPacking() {
return packing;
}
public void setPacking(String packing) {
this.packing = packing;
}
public String getEntry() {
return entry;
}
public void setEntry(String entry) {
this.entry = entry;
}
public void showProduct(){
System.out.println("包装:"+packing);
System.out.println("实体:"+entry);
}
}
抽象建造:
public abstract class Builder {
public abstract void setPacking();
public abstract void setEntry();
public abstract Product getProduct();
}
具体建造1:
public class ConcreteBuilder extends Builder {
Product product;
public ConcreteBuilder(){
product = new Product();
}
@Override
public void setPacking() {
product.setPacking("塑料");
}
@Override
public void setEntry() {
product.setEntry("肉");
}
@Override
public Product getProduct() {
return product;
}
}
具体建造2:
public class ConcreteBuilder2 extends Builder {
Product product ;
public ConcreteBuilder2(){
product = new Product();
}
@Override
public void setPacking() {
product.setPacking("玻璃");
}
@Override
public void setEntry() {
product.setEntry("水");
}
@Override
public Product getProduct() {
return product;
}
}
导演类:
public class Director {
public Product getProduct(Builder builder){
builder.setPacking();
builder.setEntry();
return builder.getProduct();
}
}
测试类:
public class Client {
public static void main(String[] args) {
Director director = new Director();
Product producta = director.getProduct(new ConcreteBuilder());
producta.showProduct();
System.out.println("===================================");
Product productb = director.getProduct(new ConcreteBuilder2());
productb.showProduct();
}
}
测试结果: