建造模式是对象的创建模式,可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造模式的结构
一个汽车制造厂的例子(一):
抽象的建造者:造一个汽车要什么零件
具体建造者:造出各个零件,返还汽车
导演者:厂长,调派具体建造者造零件,产汽车
产品角色:汽车
一个汽车制造厂的例子(二):
抽象的建造者(Builder):要什么零件都可以
具体建造者(一):造出各个零件,返还汽车
具体建造者(二):造出各个零件,返还火车
导演者:厂长,调派具体建造者造(一)零件,产汽车;
产品角色:汽车,火车
class Product {
private String name;
private String type;
public void showProduct(){
System.out.println("名称:"+name);
System.out.println("型号:"+type);
}
public void setName(String name) {
this.name = name;
}
public void setType(String type) {
this.type = type;
}
}
abstract class Builder {
public abstract void setPart(String arg1, String arg2);
public abstract Product getProduct();
}
class ConcreteBuilder extends Builder {
private Product product = new Product();
public Product getProduct() {
return product;
}
public void setPart(String arg1, String arg2) {
product.setName(arg1);
product.setType(arg2);
}
}
public class Director {
private Builder builder = new ConcreteBuilder();
public Product getAProduct(){
builder.setPart("宝马汽车","X7");
return builder.getProduct();
}
public Product getBProduct(){
builder.setPart("奥迪汽车","Q5");
return builder.getProduct();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Director director = new Director();
Product product1 = director.getAProduct();
product1.showProduct();
Product product2 = director.getBProduct();
product2.showProduct();
}
在什么情况下使用建造模式
1.需要生成的产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以仅仅是一个对象的一个组成成分。
2.需要生成的产品对象的属性互相依赖。
3.在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品的创建过程中不易得到。