1. 程式人生 > >設計模式(七)Builder模式

設計模式(七)Builder模式

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     public
abstract 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(new
String[] { 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模式