設計模式(七)Builder模式
阿新 • • 發佈:2018-04-01
true length 其中 struct AI buffer col 我們 一個
Builder模式,從這個名字我們可以看出來,這種設計模式就是用於組裝具有復雜結構的實例的。
下面還是以一個實例程序來解釋這種設計模式,先看實例程序的類圖。
這裏為了調試方便,只實現其中一個功能TextBuilder,剩下的HTMLBuilder可自行編寫。
然後是實例程序代碼。
1 package BigJunOba.bjtu.Builder; 2 3 public abstract class Builder { 4 5 public abstract void makeTitle(String title); //編寫標題 6 publicabstract void makeString(String str); //編寫字符串 7 public abstract void makeItems(String[] items); //編寫含有條目 8 public abstract void close(); //完成文檔 9 10 }
這是Builder類。
1 package BigJunOba.bjtu.Builder; 2 /** 3 * @author BigJunOba 4 * Director類使用Builder類中聲明的方法來編寫文檔5 */ 6 public class Director { 7 8 private Builder builder; 9 10 public Director(Builder builder) { 11 this.builder = builder; 12 } 13 14 public void construct() { 15 builder.makeTitle("我是一個標題"); 16 builder.makeString("一.下面我要講第一個問題"); 17 builder.makeItems(newString[] { 18 "1.廉", 19 "2.寶", 20 "3.寶", 21 }); 22 builder.makeString("二.下面我還要講第二個問題"); 23 builder.makeItems(new String[] { 24 "4.大", 25 "5.帥", 26 "6.逼", 27 }); 28 builder.close(); 29 } 30 31 }
這是Director類。
1 package BigJunOba.bjtu.Builder; 2 3 public class TextBuilder extends Builder { 4 5 //用來將文檔內容保存在buffer字段中 6 private StringBuffer buffer = new StringBuffer(); 7 8 @Override 9 public void makeTitle(String title) { 10 buffer.append("======================\n"); 11 buffer.append("\n"); 12 buffer.append("[" + title + "]"); 13 buffer.append("\n"); 14 } 15 16 @Override 17 public void makeString(String str) { 18 buffer.append(‘*‘ + str + "\n"); 19 buffer.append("\n"); 20 } 21 22 @Override 23 public void makeItems(String[] items) { 24 for (int i = 0; i < items.length; i++) { 25 buffer.append(" ." + items[i] + "\n"); 26 } 27 buffer.append("\n"); 28 } 29 30 @Override 31 public void close() { 32 buffer.append("======================\n"); 33 } 34 35 public String getResult() { 36 return buffer.toString(); //將StringBuffer變換為String 37 } 38 }
這是TextBuilder類。
1 package BigJunOba.bjtu.Builder; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 7 TextBuilder textBuilder = new TextBuilder(); 8 Director director = new Director(textBuilder); 9 director.construct(); 10 String result = textBuilder.getResult(); 11 System.out.println(result); 12 13 } 14 }
這是Main類。
====================== [我是一個標題] *一.下面我要講第一個問題 .1.廉 .2.寶 .3.寶 *二.下面我還要講第二個問題 .4.大 .5.帥 .6.逼 ======================
這是輸出。
Builder模式的類圖和時序圖如下。
解釋每一個部分:
Builder:
Director
ConcreteBuilder
Client
設計模式(七)Builder模式