/**
*
*/
package com.wangbiao.design.builder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* @Title: Product.java
* @Package com.wangbiao.design.builder
* @Description: TODO
* @author wangbiao
* @date 2014-9-26 上午10:06:53
* @version V1.0
*/
public class Product {
List parts = new ArrayList();
public void addPart(String part){
parts.add(part);
}
public void display(){
Iterator iter = parts.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}
/**
*
*/
package com.wangbiao.design.builder;
/**
* @Title: Builder.java
* @Package com.wangbiao.design.builder
* @Description: TODO
* @author wangbiao
* @date 2014-9-26 上午10:16:28
* @version V1.0
*/
public abstract class Builder {
public abstract void builderPartA();
public abstract void bulderPartB();
public abstract Product getResult();
}
/**
*
*/
package com.wangbiao.design.builder;
/**
* @Title: ConcreteBuilderA.java
* @Package com.wangbiao.design.builder
* @Description: TODO
* @author wangbiao
* @date 2014-9-26 上午10:18:47
* @version V1.0
*/
public class ConcreteBuilderA extends Builder {
private Product product = new Product();
/* (non-Javadoc)
* @see com.wangbiao.design.builder.Builder#builderPartA()
*/
@Override
public void builderPartA() {
// TODO Auto-generated method stub
product.addPart("大屏");
}
/* (non-Javadoc)
* @see com.wangbiao.design.builder.Builder#bulderPartB()
*/
@Override
public void bulderPartB() {
// TODO Auto-generated method stub
product.addPart("金属机身");
}
/* (non-Javadoc)
* @see com.wangbiao.design.builder.Builder#getResult()
*/
@Override
public Product getResult() {
// TODO Auto-generated method stub
return product;
}
}
/**
*
*/
package com.wangbiao.design.builder;
/**
* @Title: ConcreteBuilderB.java
* @Package com.wangbiao.design.builder
* @Description: TODO
* @author wangbiao
* @date 2014-9-26 上午10:19:05
* @version V1.0
*/
public class ConcreteBuilderB extends Builder {
private Product product = new Product();
/* (non-Javadoc)
* @see com.wangbiao.design.builder.Builder#builderPartA()
*/
@Override
public void builderPartA() {
// TODO Auto-generated method stub
product.addPart("小屏");
}
/* (non-Javadoc)
* @see com.wangbiao.design.builder.Builder#bulderPartB()
*/
@Override
public void bulderPartB() {
// TODO Auto-generated method stub
product.addPart("塑料机身");
}
/* (non-Javadoc)
* @see com.wangbiao.design.builder.Builder#getResult()
*/
@Override
public Product getResult() {
// TODO Auto-generated method stub
return product;
}
}
/**
*
*/
package com.wangbiao.design.builder;
/**
* @Title: Director.java
* @Package com.wangbiao.design.builder
* @Description: TODO
* @author wangbiao
* @date 2014-9-26 上午10:19:19
* @version V1.0
*/
public class Director {
public void createProduct(Builder builder){
builder.builderPartA();
builder.bulderPartB();
}
}
/**
*
*/
package com.wangbiao.design.builder;
/**
* @Title: Client.java
* @Package com.wangbiao.design.builder
* @Description: TODO
* @author wangbiao
* @date 2014-9-26 上午10:16:10
* @version V1.0
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
*建造者模式的好处是分离了建造代码和表示代码,隐藏了建造的过程。
*建造者模式适用于创建复杂对象的逻辑独立于创建过程和装配方式的时候 。
*
*/
Director director = new Director();
Builder builderA = new ConcreteBuilderA();
Builder builderB = new ConcreteBuilderB();
director.createProduct(builderA);
Product p1 = builderA.getResult();
p1.display();
director.createProduct(builderB);
Product p2 = builderB.getResult();
p2.display();
}
}