java设计模式--建造者模式
建造者模式定义
建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有不同的表示。
构造者模式具有的角色图
- Builder 创建一个产品对象的各个部件的接口,和一个整合各个部件的方法返回这个产品
- ConcreateBuilder 实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
- Director 构造一个使用builder接口的对象,负责指导构建过程
- Product 表示被构造的复杂对象
适用场景
- 当创建的对象的算法应该独立于该对象的组成部分以及它们的装配方式时
- 当构造过程必须允许被构造的对象有不同表示时
举例
比如要构建人person,人有头、身体、脚三个部分
代码
创建一个被构造的复杂对象
/**
* Created by td on 2017/9/8.
*/
public class Person {
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;
}
@Override
public String toString() {
return "Person{" +
"head='" + head + '\'' +
", body='" + body + '\'' +
", foot='" + foot + '\'' +
'}';
}
}
/**
* Created by td on 2017/9/8.
*/
public class ManPerson extends Person {
public ManPerson() {
System.out.println("开始构建男人...");
}
}
/**
* Created by td on 2017/9/8.
*/
public class WomanPerson extends Person{
public WomanPerson() {
System.out.println("开始构建女人...");
}
}
定义一个builder接口,用来构建对象的组成部分
/**
* Created by td on 2017/9/8.
*/
public interface Builder {
void buildHead();
void buildBody();
void buildFoot();
Person buildPerson();
}
定义具体builder的类
/**
* Created by td on 2017/9/8.
*/
public class ManPersonBuilder implements Builder {
private Person person;
public ManPersonBuilder() {
person = new ManPerson();
}
@Override
public void buildHead() {
person.setHead("创建男人的头...");
// System.out.println("创建男人的头...");
}
@Override
public void buildBody() {
person.setBody("创建男人的身体...");
}
@Override
public void buildFoot() {
person.setFoot("创建男人的脚...");
}
@Override
public Person buildPerson() {
return person;
}
}
/**
* Created by td on 2017/9/8.
*/
public class WomanPersonBuilder implements Builder{
private Person person ;
public WomanPersonBuilder() {
person = new WomanPerson();
}
@Override
public void buildHead() {
person.setHead("创建女人的头....");
}
@Override
public void buildBody() {
person.setBody("创建女人的身体....");
}
@Override
public void buildFoot() {
person.setFoot("创建女人的脚....");
}
@Override
public Person buildPerson() {
return person;
}
}
定义指导构建过程的类Director
/**
* Created by td on 2017/9/8.
*/
public class PersonDirector {
public Person constructPerson(Builder builder){
builder.buildHead();
builder.buildFoot();
builder.buildBody();
return builder.buildPerson();
}
}
定义测试类
public static void main(String[] args) {
Builder manPersonBuilder = new ManPersonBuilder();
Builder womanPersonBuilder = new WomanPersonBuilder();
PersonDirector personDirector = new PersonDirector();
Person person = personDirector.constructPerson(manPersonBuilder);
Person person1 = personDirector.constructPerson(womanPersonBuilder);
System.out.println(person.toString());
System.out.println(person1.toString());
}
运行结果
开始构建男人...
开始构建女人...
Person{head='创建男人的头...', body='创建男人的身体...', foot='创建男人的脚...'}
Person{head='创建女人的头....', body='创建女人的身体....', foot='创建女人的脚....'}