建造者模式(builder)(这个比较简单)
定义:
使一个复杂对象的构造与它的表示分离,使同样的构造方式可以构造不同的表示!
适用性:
1.当构造过程必须允许构造对象有不同的表示时;
2.当创建复杂对象的算法应该独立于对象的组成部分以及它们的装配方式时。
角色:
1.builder: 一个接口,为创建一个产品对象的指定部件!
2.concreteBuilder:实现builder接口,完成对象的指定部件的具体创建,以及装配,定义并明确他所创建的表示,并提供一个检索产品的接口!
3.product:复杂对象,concreteBuilder中完成它的所有部件的具体创建以及对该对象的各部件的装配!
4.Director:使用者,在这里使用builder创建对象!
builder:
package pattern.creational.builder.builder;
import pattern.creational.builder.bean.Person;
public interface PersonBuilder {
public void createBody(String str);
public void createHead(String str);
public void createFoot(String str);
public Person createPerson();
}
package pattern.creational.builder.builder.impl;
import pattern.creational.builder.bean.Man;
import pattern.creational.builder.bean.Person;
import pattern.creational.builder.builder.PersonBuilder;
public class ManBuilder implements PersonBuilder {
private Person person;
public ManBuilder(){
person = new Man();
}
/* (non-Javadoc)
* @see pattern.builder.builder.PersonBuilder#createBody(java.lang.String)
*/
public void createBody(String str){
person.setBody(str);
}
/* (non-Javadoc)
* @see pattern.builder.builder.PersonBuilder#createHead(java.lang.String)
*/
public void createHead(String str){
person.setHead(str);
}
/* (non-Javadoc)
* @see pattern.builder.builder.PersonBuilder#createFoot(java.lang.String)
*/
public void createFoot(String str){
person.setFoot(str);
}
/* (non-Javadoc)
* @see pattern.builder.builder.PersonBuilder#createPerson()
*/
public Person createPerson(){
return person;
}
}
product:
package pattern.creational.builder.bean;
public class Person {
protected String head;
protected String body;
protected String foot;
public void setHead(String head) {
this.head = head;
}
public String getHead() {
return head;
}
public void setBody(String body) {
this.body = body;
}
public String getBody() {
return body;
}
public void setFoot(String foot) {
this.foot = foot;
}
public String getFoot() {
return foot;
}
}
package pattern.creational.builder.bean;
public class Man extends Person {
}
Director:
package pattern.creational.builder.director;
import pattern.creational.builder.bean.Person;
import pattern.creational.builder.builder.PersonBuilder;
/**
* 使用者
* @author silence
*
*/
public class Director {
public Person createPerson(PersonBuilder pb){
pb.createBody("建造男人的身体");
pb.createFoot("建造男人的脚");
pb.createHead("建造男人的头");
return pb.createPerson();
}
}
test:
package pattern.creational.builder.test;
import pattern.creational.builder.bean.Man;
import pattern.creational.builder.builder.PersonBuilder;
import pattern.creational.builder.builder.impl.ManBuilder;
import pattern.creational.builder.director.Director;
public class Main {
public static void main(String[] args){
PersonBuilder pb = new ManBuilder();
Director director = new Director();
Man man = (Man) director.createPerson(pb);
System.out.println(man.getBody()+","+man.getFoot()+","+man.getHead());
}
}