码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式(七)Builder模式

时间:2018-04-01 13:06:41      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:err   rgs   main   text   方便   png   []   stringbu   splay   

  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模式

标签:err   rgs   main   text   方便   png   []   stringbu   splay   

原文地址:https://www.cnblogs.com/BigJunOba/p/8684252.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!