生活随笔
收集整理的這篇文章主要介紹了
设计模式之——Builder建造模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Builder模式又叫建造模式,是用于組裝具有復雜結構的實例的模式。
示例程序是編寫一個文檔,并且寫入到文件中,該文檔具有以下結構,含有標題,字符串,一些條目。
package site.wangxin520.gof.builder;/*** 建造者模式的核心——建造者* 負責定義用于生成實例的API接口* @author wangXgnaw* 在本類中,定義了四個方法,分別是標題,字符串和條目,最后的close()方法則用于生成文件以及關閉相應的流*/
public abstract class Builder {/*** 抽象方法,傳入字符串標題,用于生成文件的字符串* @param title*/public abstract void makeTitle(String title);/*** 抽象方法,傳入字符串* @param string*/public abstract void makeString(String string);/*** 抽象方法,用于傳入一個字符串數(shù)組,生成文件中對應的條目* @param items*/public abstract void makeItems(String[] items);/*** 抽象方法,關閉相應的流*/public abstract void close();} - Director 監(jiān)工類,調用builder的方法
package site.wangxin520.gof.builder;/*** 管理者,監(jiān)工* 負責使用builder角色的接口來生成實例,它并不依賴于具體實現(xiàn)類,而是面對抽象類/父類,或者接口進行操作* @author wangXgnaw* 在本類匯總有一個Builder的屬性。* 采用的是多態(tài)的方法,父類接口指向子類對象*/
public class Director {private Builder builder;/*** 構造器傳入Builder屬性的具體實現(xiàn)* @param builder*/public Director(Builder builder){this.builder=
builder;}/*** 生成文檔的方法*/public void construct(){builder.makeTitle("標題:大家好"
);builder.makeString("從早上到下午"
);builder.makeItems(new String[]{"早安"
,"午安"
,});builder.makeString("晚上"
);builder.makeItems(new String[]{"晚安"
,"拜拜"
,});builder.close();}} - HtmlBuilder 繼承了Builder類,實現(xiàn)了相應的方法
package site.wangxin520.gof.builder;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;/*** 生成HTML文件的建造模式,對Builder抽象類的具體實現(xiàn)* @author wangXgnaw**/
public class HtmlBuilder
extends Builder{private StringBuilder sb=
new StringBuilder();@Overridepublic void makeTitle(String title) {sb.append("<html>").append("<head><title>").append(title).append("</title></head><body>"
);}@Overridepublic void makeString(String string) {sb.append("<p>").append(string).append("</p>"
);}@Overridepublic void makeItems(String[] items) {sb.append("<ul>"
);for (String string : items) {sb.append("<li>").append(string).append("</li>"
);}sb.append("</ul>"
);}@Overridepublic void close() {sb.append("</body></html>"
);FileWriter fw=
null;try {fw=
new FileWriter(
new File("E:/TextBuilder.html"
));fw.write(sb.toString());} catch (IOException e) {e.printStackTrace();} finally {if(fw!=
null){try {fw.close();} catch (IOException e) {e.printStackTrace();}}}}} package site.wangxin520.gof.builder;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;/*** 生成txt文件的建造模式,對Builder抽象類的具體實現(xiàn)* * @author wangXgnaw**/
public class TextBuilder
extends Builder {private StringBuilder sb =
new StringBuilder();@Overridepublic void makeTitle(String title) {sb.append("========================================").append("\r\n"
);sb.append("【" + title + "】").append("\r\n"
);sb.append("========================================").append("\r\n").append("\r\n"
);}@Overridepublic void makeString(String string) {sb.append("【.】" + string).append("\r\n").append("\r\n"
);}@Overridepublic void makeItems(String[] items) {for (String string : items) {sb.append("\t" + string).append("\r\n"
);}sb.append("\r\n"
);}@Overridepublic void close() {sb.append("========================================"
);FileWriter fw =
null;try {fw =
new FileWriter(
new File("E:/TextBuilder.txt"
));fw.write(sb.toString());} catch (IOException e) {e.printStackTrace();} finally {if (fw !=
null) {try {fw.close();} catch (IOException e) {e.printStackTrace();}}}}} package site.wangxin520.gof.builder;/*** 建造者模式的測試類* @author wangXgnaw**/
public class Main {public static void main(String[] args) {//先構建一個Builder,采用的是TextBuilder的實現(xiàn)類Builder b1=
new TextBuilder();//將Builder實例傳入到Director中Director director1=
new Director(b1);//調用構造方法,生成文檔
director1.construct();//與上同Builder b2=
new HtmlBuilder();Director director2=
new Director(b2);director2.construct();}} 沒有報錯,并且成功的在E盤中寫入倆文件
TextBuilder.txt
TextBuilder.html(這里忘記改名字了)
轉載于:https://www.cnblogs.com/wangxinblog/p/7639504.html
總結
以上是生活随笔為你收集整理的设计模式之——Builder建造模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。