GOF 建造者模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
建造者模式主要由以下部分组成。
建造者接口:给出一个接口,以规范产品对象的各个组成成分的建造,这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件创建
具体建造者:实现了建造者接口。针对不同的商业逻辑,具体化复杂对象的各部分创建。创建完成后,提供产品的实例。
指导者:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
产品:要建造的复杂对象。
创建者模式的使用范围:
(1)需要生成的产品对象有复杂的内部结构。
(2)需要生成的产品对象的属性相互依赖,建造者可以强迫生成顺序。
(3)在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到。
实现效果:
(1)建造者模式的使用时产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。
(2)每一个Builder都相对独立,而其他的Builder无关。
(3)模式所创建的产品易于控制。
//复杂对象
public class Person {
private String foot;
private String body;
private String head;
public String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
}
//子类
public class Man extends Person{
}
//建造者接口
public interface Builder {
void buildFoot();
void buildBody();
void buildHead();
public Person buildPerson();
}
//具体建造者
public class PersonBuilder implements Builder{
Person man;
public PersonBuilder() {
man = new Man();
}
@Override
public void buildFoot() {
System.out.println("shuangjiao");
}
@Override
public void buildBody() {
System.out.println("shenti");
}
@Override
public void buildHead() {
System.out.println("toubu");
}
@Override
public Person buildPerson() {
return man;
}
}
//指导者
public class Director {
public Person constructPerson(PersonBuilder pb) {
pb.buildBody();
pb.buildFoot();
pb.buildHead();
return pb.buildPerson();
}
}