设计模式之Builder
杨恒贤(yanghx@70345.com)
1. 定义:
Builder模式就是将事物的创建与功能分开,使得利用同样的过程可以创建不同的对象。
Builder模式与Factory模式差不多,他们之间分别就是Builder模式的特点。只通过指定复杂对象的类型和内容来创建对象,用户不必知道实现细节。
说道Builder就必须说明一下Director类,Director类的作用就是遍历Builder创建真正指定的Builder对象。一般利用的是Iterator来遍历。
2. UML图表示
3. 使用
首先假设一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示.
我们以汽车为例:
下面是Builder接口代码实现:
/**
* @author yanghx2004
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public interface Builder {
public void buildSteer();
public void buildEngine();
public void buildWheel();
Car getResult();
}
上面的接口方法,getResult返回对象,其他以Build开头的是构建部件。
UML图如下:
下面我们讲述Director类的具体作用
public class Director {
/**
* @link aggregation
*/
Builder lnkCarBuilder = null;
public Director(Builder builder) {
this.lnkCarBuilder = builder;
}
public void construct() {
lnkCarBuilder.buildEngine();
lnkCarBuilder.buildSteer();
lnkCarBuilder.buildWheel();
}
}
根据输入的Builder不同,利用Builder的构建步骤创建不通对象。
汽车对象(你可以Factory扩展)
package com.yjsoft.builder;
/**
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
* @author yanghx2004
*/
public class Car {
private String steer;
private int wheel;
private String engine;
public void show() {
System.out.println("steer:"+steer);
System.out.println("wheel:"+wheel);
System.out.println("engine:"+engine);
}
public String getEngine() {
return engine;
}
public void setEngine(String i) {
engine = i;
}
public int getWheel() {
return wheel;
}
public void setWheel(int i) {
wheel = i;
}
public String getSteer() {
return steer;
}
public void setSteer(String i) {
steer = i;
}
}