設(shè)計模式之建造模式
來源:程序員人生 發(fā)布時間:2015-04-15 09:07:21 閱讀次數(shù):2416次
建造模式是對象的創(chuàng)建模式,建造模式可以將1個產(chǎn)品的內(nèi)部表象和產(chǎn)品的生產(chǎn)進程分割開來,從而是1個建造進程生成具有不同的內(nèi)部表象的產(chǎn)品
對象。
建造模式的結(jié)構(gòu)以下類圖所示:

在這個系統(tǒng)中,終究產(chǎn)品Product只有兩個零件,即part1和part2,相應(yīng)的建造方法也有兩個:buildPart1()和buildPart2(),同時呢本模式觸及到4個角色,分別為:
*抽象建造者(Builder)角色:給出1個抽象接口,以規(guī)范產(chǎn)品對象的各個組成部份的建造,1般而言,此接口獨立于利用程序的商業(yè)邏輯。
*具體建造者(Concrete Builder)角色:擔負這個角色的是與利用程序緊密相干的1些類,它們在利用程序調(diào)用下創(chuàng)建產(chǎn)品的實例。
*導(dǎo)演者(Director)角色:擔負這個角色的類調(diào)用具體建造者角色以創(chuàng)建產(chǎn)品對象,應(yīng)當指出的是,導(dǎo)演者角色并沒有產(chǎn)品類的具體知識。
真正具有產(chǎn)品類的具體知識是具體建造者角色。
*產(chǎn)品(Product)角色:產(chǎn)品(Product)便是建造中的復(fù)雜對象,1般來講,1個系統(tǒng)中會有多于1個的產(chǎn)品類,而且這些產(chǎn)品類其實不1定有共同
的接口,而完全可以是不相干聯(lián)的。
以下給出這個系統(tǒng)比較簡單的示意性源碼:
Director:
package builder;
public class Director {
private Builder builder;
/**
* 產(chǎn)品構(gòu)造方法,負責(zé)調(diào)用各個零件建造方法
*/
public void construct(){
builder=new ConcreteBuilder();
builder.buildPart1();
builder.buildPart2();
builder.retrieveResult();
//continue with other code
}
}
Builder:
package builder;
public abstract class Builder {
/**
* 產(chǎn)品的零件建造方法
*/
public abstract void buildPart1();
/**
* 產(chǎn)品零件建造方法
*/
public abstract void buildPart2();
/**
* 產(chǎn)品返還方法
*/
public abstract Product retrieveResult();
}
ConcreteBuilder:
package builder;
public class ConcreteBuilder extends Builder {
private Product product=new Product();
/**
* 產(chǎn)品零件建造方法
*/
public void buildPart1() {
//build the first part of the part
}
/**
* 產(chǎn)品零件建造方法
*/
public void buildPart2() {
//build the second part of the product
}
/**
* 產(chǎn)品返還方法
*/
public Product retrieveResult() {
return product;
}
}
Product:
package builder;
public class Product {
//Anything pertaining to this product
}
這些源碼中,有許多的方法并沒有實現(xiàn),和Product類中并沒有任何屬性或方法,但其實不影響其瀏覽性,在具體的建造進程中,才會出現(xiàn)對應(yīng)的產(chǎn)品
和相應(yīng)的實現(xiàn)進程。
簡單的建造模式,就是如此。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈