分为指导者,抽象建造者,具体建造者
有一个例子
import java.util.*;
import junit.framework.*;
//不同的媒体形式:
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.s = s; }
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.out.println("building book framework");
b = new book();
}
public void addmediaitem(mediaitem chapter) {
system.out.println("adding chapter " + chapter);
b.add(chapter);
}
public media getfinishedmedia() { return b; }
}
class magazinebuilder extends mediabuilder {
private magazine m;
public void buildbase() {
system.out.println("building magazine framework");
m = new magazine();
}
public void addmediaitem(mediaitem article) {
system.out.println("adding article " + article);
m.add(article);
}
public media getfinishedmedia() { return m; }
}
class websitebuilder extends mediabuilder {
private website w;
public void buildbase() {
system.out.println("building web site framework");
w = new website();
}
public void addmediaitem(mediaitem webitem) {
system.out.println("adding web item " + webitem);
w.add(webitem);
}
public media getfinishedmedia() { return w; }
}
//指导者角色,也叫上下文
class mediadirector {
private mediabuilder mb;
public mediadirector(mediabuilder mb) {
this.mb = mb; //具有策略模式相似特征的
}
public media producemedia(list input) {
mb.buildbase();
for(iterator it = input.iterator(); it.hasnext();)
mb.addmediaitem((mediaitem)it.next());
return mb.getfinishedmedia();
}
};
//测试程序――客户程序角色
public class buildmedia extends testcase {
private list input = arrays.aslist(new mediaitem[] {
new mediaitem("item1"), new mediaitem("item2"),
new mediaitem("item3"), new mediaitem("item4"),
});
public void testbook() {
mediadirector buildbook = new mediadirector(new bookbuilder());
media book = buildbook.producemedia(input);
string result = "book: " + book;
system.out.println(result);
assertequals(result, "book: [item1, item2, item3, item4]");
}
public void testmagazine() {
mediadirector buildmagazine = new mediadirector(new
magazinebuilder());
media magazine = buildmagazine.producemedia(input);
string result = "magazine: " + magazine;
system.out.println(result);
assertequals(result, "magazine: [item1, item2, item3, item4]");
}
public void testwebsite(){
mediadirector buildwebsite = new mediadirector(new
websitebuilder());
media website = buildwebsite.producemedia(input);
string result = "web site: " + website;
system.out.println(result);
assertequals(result, "web site: [item1, item2, item3, item4]");
}
public static void main(string[] args) {
junit.textui.testrunner.run(buildmedia.class);
}
}
闽公网安备 35060202000074号