建造者模式

建造模式可以將一個產品的內部表象與產品的生成過程分割開來,從而可以使一個建造過程生成具有不同的內部表象的產品對象。

一.建造模式的結構


建造者模式

在這個示意性的系統裡,最終產品Product只有兩個零件,即part1和part2。相應的建造方法也有兩個:buildPart1和buildPart2.本模式涉及到四個角色,他們分別是:

* 抽象建造者(Builder):給出一個抽象接口,以規範產品對象的各個組成成分的建造。一般而言,此接口獨立於應用程序的商業邏輯。模式中直接創建產品對象的是具體建造者(ConcreteBuilder)角色。具體建造者類必須實現這個接口所要求的兩種方法:一種是建造方法,另一種的是結果返還方法。一般來說,產品所包含的零件數目與建造方法的數目相符。換言之,有多少零件,就有多少相應的建造方法。

* 具體建造著(Concrete Builder):擔任這個角色的是與應用程序緊密相關的一些類,他們在應用程序調用下創建產品的實例。這個角色要完成的任務包括:1.實現抽象建造者Builder所聲明的接口,給出一步一步地完成創建產品實例的操作。2.在建造過程完成後,提供產品的實例。

* 導演者(Director):擔任這個角色的類調用具體建造者角色以創建產品 對象。應當指出的是,導演者角色並沒有產品類的具體知識,真正擁有產品類的具體知識的是具體建造者角色。

* 產品(Product):產品便是建造中的複雜對象。一般來說,一個系統中會有多於一個的產品類,而且這些產品類並不一定有共同的接口,而完全可以是不相關聯的。

二.源代碼

Director:

<code>public class Director {
private Builder builder;

/**
* 產品構造方法,負責調用各個零件建造方法
*/
public void construct(){
builder = new ConcreteBuilder();
builder.buildPart1();
builder.buildPart2();
builder.retrieveResult();
}
}/<code>

Builder:

<code>public abstract  class Builder {
/**
* 產品零件建造方法
*/
public abstract void buildPart1();

/**
* 產品零件建造方法
*/
public abstract void buildPart2();

/**
* 產品返還方法
* @return
*/
public abstract Product retrieveResult();
}/<code>

ConcreteBuilder:

<code>public class ConcreteBuilder extends Builder {
private Product product = new Product();

/**
* 產品零件建造方法
*/
@Override
public void buildPart1() {

}

/**
* 產品零件建造方法
*/
@Override
public void buildPart2() {

}

/**
* 產品返還方法
* @return
*/
@Override
public Product retrieveResult() {
return product;
}
}/<code>

Product:

<code>public class Product{

}/<code>


分享到:


相關文章: