将一个复杂对象的构造与表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式称之为建造者模式。
一般建造者模式由四个角色构成,Builder,创建产品各个部件的抽象接口;ConcreteBuilder,Builder的具体实现类,在此构建和装配产品的具体各个部件;Director,构建的使用Builder的对象,在此调用抽象接口及其方法;Product,产品超类及其具体实现类;
1.创建产品各个部件及产品的抽象接口
public interface PersonBuilder {
void buildHead();
void buildBody();
void buildFoot();
Person buildPerson();
}
2.抽象接口的具体实现类
public class MenBuilder implements PersonBuilder{
Person person;
public MenBuilder(){
person = new Man();
}
@Override
public void buildHead() {
System.out.println("build man's head!");
}
@Override
public void buildBody() {
System.out.println("build man's body!");
}
@Override
public void buildFoot() {
System.out.println("build man's foot!");
}
@Override
public Person buildPerson() {
return person;
}
}
public class WomenBuilder implements PersonBuilder{
Person person;
public WomenBuilder(){
person = new Woman();
}
@Override
public void buildHead() {
System.out.println("build women's head!");
}
@Override
public void buildBody() {
System.out.println("build women's body!");
}
@Override
public void buildFoot() {
System.out.println("build women's foot!");
}
@Override
public Person buildPerson() {
return person;
}
}
3.调用抽象接口的类
public class PersonDirector {
public Person constructPerson(PersonBuilder pb){
pb.buildHead();
pb.buildBody();
pb.buildFoot();
return pb.buildPerson();
}
}
4.产品的超类及其子类
public class Person implements Serializable{
private static final long serialVersionUID = 1L;
private String head;
private String body;
private String foot;
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
}
public class Man extends Person{
public Man(){
System.out.println("开始建造男人!");
}
}
public class Woman extends Person{
public Woman(){
System.out.println("开始建造女人!");
}
}
5.测试类
public class test {
public static void main(String[] args) {
PersonDirector pd = new PersonDirector();
Person men = pd.constructPerson(new MenBuilder());
Person women = pd.constructPerson(new WomenBuilder());
}
}
6.输出结果
开始建造男人!
build man's head!
build man's body!
build man's foot!
开始建造女人!
build women's head!
build women's body!
build women's foot!
建造者模式中构建过程与产品本身分离,具体产品构造者相互独立,差异产品之间具有较多的共同属性,如果差异增大,则建造者模式不再适合!