Android Ap 开发 设计模式第七篇:生成器模式
Builder Pattern
模式解讀
生活在深圳這所高速發(fā)展的城市,高樓大廈林立。所謂萬丈高樓平地起,在我們感慨樓層的高聳之外,更要配服樓層的建造者和設(shè)計者。大樓首先得打穩(wěn)地基、搭建骨架,再由下往上一層層蓋上去。而這樣的架構(gòu)從程序的設(shè)計模式來說有個專用名詞叫:“?Builder ?”。
場景模擬
由一個固定的建筑材料“固定的字符串”,然后將這些建筑材料組合拼裝,按照樓層的需要建造不同的大樓層,如:商務(wù)層、購務(wù)層、停車層等“組合拼裝字備份域控制器串”。
?
功能演示
測試程序結(jié)構(gòu)圖如下:
?
UML圖中,共有四個類:
Builder 抽象類:不含實際處理內(nèi)容,僅聲明抽象方法。
Director 類:負(fù)責(zé)產(chǎn)生文件的類
TextBuilder 類:產(chǎn)生一般文件格式文件
HtmlBuilder 類:產(chǎn)生HTML格式文件
?
Builder 抽象類
?
/**?*?聲明產(chǎn)生“文件”的所有方法的抽象類。
?*?
?*?@author?Administrator
?*
?*/
public?abstract?class?Builder?{
????public?abstract?void?makeTitle(String?title);//產(chǎn)生文件中的標(biāo)題
????public?abstract?void?makeString(String?str);????//產(chǎn)生文件中的字符串
????public?abstract?void?makeItems(String[]?items);????//產(chǎn)生文件中的項目
????public?abstract?Object?getResult();????//取得完成文件的方法
}
?
Director 類
?
public?class?Director?{????private?Builder?builder;
????/**
?????*?傳入Builder?的子類對象
?????*?@param?builder
?????*/
????public?Director(Builder?builder)?{
????????this.builder?=?builder;
????}
????
????/**
?????*?建立?文件
?????*?@return
?????*/
????public?Object?construct(){
????????builder.makeTitle("terry");
????????builder.makeString("android?developer");
????????builder.makeItems(new?String[]{"Framework","java","native","HAL","Service"});
????????builder.makeString("windows?phone?7?developer");
????????builder.makeItems(new?String[]{"for?silverlight","XNA"});
????????return?builder.getResult();
????}
????
}
?
該 類的構(gòu)造函數(shù)的參數(shù)是 Builder 類型,但實際上并沒有任何Builder 類的對象實例被傳遞出去作為參數(shù)。因為Builder 類是抽象類,根本無法產(chǎn)生對象實例。實際上傳給Director 的構(gòu)造函數(shù)是Builder 的子類,根據(jù)所傳進來的類型決定產(chǎn)生文件的格式。
因此如果想要達到產(chǎn)生文件的目的,Builder 必須聲明一些必要而且面面俱到的方法群組。
TextBuilder 類
?
public?class?TextBuilder?extends?Builder{????private?StringBuffer?buffer=new?StringBuffer();
????
????@Override
????public?Object?getResult()?{
????????//?TODO?Auto-generated?method?stub
????????buffer.append("======================\n");
????????return?buffer.toString();
????}
????@Override
????public?void?makeItems(String[]?items)?{
????????//?TODO?Auto-generated?method?stub
????????for(String?str:items)
????????{
????????????buffer.append(str+"\n");
????????}
????????
????}
????@Override
????public?void?makeString(String?str)?{
????????//?TODO?Auto-generated?method?stub
????????buffer.append(str+"\n");
????????
????}
????@Override
????public?void?makeTitle(String?title)?{
????????//?TODO?Auto-generated?method?stub
????????buffer.append("=========================\n");
????????buffer.append(title+"\n");?
????}
}
?
HtmlBuilder 類
?
public?class?HtmlBuilder?extends?Builder{????private?String?fileName;
????
????private?StringBuffer?writer=new?StringBuffer();
????
????
????@Override
????public?Object?getResult()?{
????????//?TODO?Auto-generated?method?stub
????????writer.append("</body></html>");?
????????return?writer.toString();
????}
????@Override
????public?void?makeItems(String[]?items)?{
????????//?TODO?Auto-generated?method?stub
????????writer.append("<ul>");
????????for(String?str:items){
????????????writer.append("<li>"+str+"</li>");
????????}
????????writer.append("</ul>");
????}
????@Override
????public?void?makeString(String?str)?{
????????//?TODO?Auto-generated?method?stub
????????writer.append("<p>"+str+"</p>");
????}
????@Override
????public?void?makeTitle(String?title)?{
????????//?TODO?Auto-generated?method?stub
????????fileName=title+".html";
????????writer.append(fileName);
????????
????????writer.append("<html><head><title>"+title+"</title></head><body>");
????????writer.append("<h1>"+title+"</h1>");
????}
????
????
}
?
運行效果如下:
?
源碼下載:
生成器模式
?
再發(fā)個求職信息:
求職android(可勝任Framework及 以上工作。一年半經(jīng)驗) 、Windows Phone 7(軟件、XNA) 開發(fā)工作。
?
?
總結(jié)
以上是生活随笔為你收集整理的Android Ap 开发 设计模式第七篇:生成器模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Google上面关于cas的文章
- 下一篇: 如何将Emacs添加到右键菜单并显示为“