建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
类图:
代码:
publicclass Product {
private List<Object> product=new ArrayList<Object>();
publicvoid add(Object part){
product.add(part);
}
public Object result(){
returnproduct;
}
}
publicabstractclass Builder {
publicabstractvoid buildPart(Object part);
publicabstract Object getResult();
}
publicclass ConcreteBuilder extends Builder{
private Product product=new Product();
@Override
public Object getResult() {
returnproduct.result();
}
@Override
publicvoid buildPart(Object part) {
this.product.add(part);
}
}
publicclass Director {
public Object conStruct(Builder builder){
return builder.getResult();
}
}
publicstaticvoid main(String[] args) {
//创建建造者
Builder builder=new ConcreteBuilder();
builder.buildPart("head");
builder.buildPart("body");
builder.buildPart("foot");
//调用创建者
Director director=new Director();
Object pro=director.conStruct(builder);
System.out.println(pro);
}
优点:一个整体和部分的解耦,而且扩展性很好。
缺点:Builder类的方法与Director类的调用方法耦合度很高。如果增加一部分要修改两个类,而且每个整体的部分的数量都要一样。
建造者适合一些对象由其他对象组成的情况。(电脑由主机,屏幕,鼠标,键盘……)