一
前幾天陪朋友去裝機店攢了一台電腦
今天就來探討一下建造模式
二
GOF給建造模式的定義為
是不是和上面提到的裝機流程相像?
這個很多人認為同抽象工廠模式相似的建造模式用在什麼樣的設計環境下呢(對於兩者的比較稍候討論)?我認為可以總結為以下環境
抽象建造者角色
具體建造者角色
指導者角色
來看下這些角色組成的類圖
首先客戶程序創建一個指導者對象
從建造模式的工作流程來看
三
實在找不到太好的例子
import java
import junit
//不同的媒體形式:
class Media extends ArrayList {}
class Book extends Media {}
class Magazine extends Media {}
class WebSite extends Media {}
// 進而不含不同的媒體組成元素:
class MediaItem {
private String s;
public MediaItem(String s) { this
public String toString() { return s; }
}
class Chapter extends MediaItem {
public Chapter(String s) { super(s); }
}
class Article extends MediaItem {
public Article(String s) { super(s); }
}
class WebItem extends MediaItem {
public WebItem(String s) { super(s); }
}
// 抽象建造者角色
class MediaBuilder {
public void buildBase() {}
public void addMediaItem(MediaItem item) {}
public Media getFinishedMedia() { return null; }
}
//具體建造者角色
class BookBuilder extends MediaBuilder {
private Book b;
public void buildBase() {
System
b = new Book();
}
public void addMediaItem(MediaItem chapter) {
System
b
}
public Media getFinishedMedia() { return b; }
}
class MagazineBuilder extends MediaBuilder {
private Magazine m;
public void buildBase() {
System
m = new Magazine();
}
public void addMediaItem(MediaItem article) {
System
m
}
public Media getFinishedMedia() { return m; }
}
class WebSiteBuilder extends MediaBuilder {
private WebSite w;
public void buildBase() {
System
w = new WebSite();
}
public void addMediaItem(MediaItem webItem) {
System
w
}
public Media getFinishedMedia() { return w; }
}
//指導者角色
class MediaDirector {
private MediaBuilder mb;
public MediaDirector(MediaBuilder mb) {
this
}
public Media produceMedia(List input) {
mb
for(Iterator it = erator(); it
mb
return mb
}
};
//測試程序——客戶程序角色
public class BuildMedia extends TestCase {
private List input = Arrays
new MediaItem(
new MediaItem(
});
public void testBook() {
MediaDirector buildBook = new MediaDirector(new BookBuilder());
Media book = buildBook
String result =
System
assertEquals(result
}
public void testMagazine() {
MediaDirector buildMagazine = new MediaDirector(new MagazineBuilder());
Media magazine = buildMagazine
String result =
System
assertEquals(result
}
public void testWebSite(){
MediaDirector buildWebSite = new MediaDirector(new WebSiteBuilder());
Media webSite = buildWebSite
String result =
System
assertEquals(result
}
public static void main(String[] args) {
junit
}
}
在實現的時候
四
建造模式可以使得產品內部的表象獨立變化
建造模式使得客戶不需要知道太多產品內部的細節
每一個具體建造者角色是毫無關系的
建造模式可以對復雜產品的創建進行更加精細的控制
五
建造模式中很可能要用到組成成品的各種組件類
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27421.html