23种设计模式(七) —— 手写实现 Builder 模式 (组装复杂实例

  • 2.3 运行结果

  • 三、 Builder 模式中登场的角色

  • 四、原文链接

Author:Gorit

Date:2021/10/24

2021年发表博文: 22/30

一、 Builder 模式


我们走进一个城市,可以看到很多高楼,这些高楼的英文叫 Build。

建造一栋大楼需要先打好地基,搭建框架,然后自底向上一层一层的构建。一般情况,很难一口气盖完这些复杂的结构。因此我们要构建组成这个物体的各个部分。然后分阶段将他们组装起来。

本节会学习组件一个复杂结构的实例 Builder 模式

二、 示例


2.1 示例实现功能

我们将使用 Builder 模式 编写一个 “文档” 编辑程序。一篇文档应当包含如下结构

● 含有一个标题

● 含有内容(字符串)

● 含有条目项目(列表)

Builder 类中定义了决定文档结构的方法,然后 Director 类使用该方法编写一个具体的文档。

Builder 类是抽象类,它只是声明了抽象方法。它的子类决定了具体编写文档的处理

● TextBuilder 类:使用纯文本(普通字符串)编写文档

● HTMLBuilder 类:使用 HTML 编写文档

在这里插入图片描述

2.2 具体实现

每个类的功能我都写进代码里了

Builder 类

package Builder;

/**

  • 声明编写文档的方法的抽象类

    1. makeTitle 编写标题
    1. makeString 编写普通文本
    1. makeTimes 条目
    1. close 完成文档编写的方法

*/

public abstract class Builder {

public abstract void makeTtile(String title);

public abstract void makeString(String str);

public abstract void makeTimes(String[] items);

public abstract void close();

}

Director

package Builder;

/**

  • 使用 Builder 类中声明的方法来编写文档

*/

public class Director {

private Builder builder;

public Director (Builder builder) { // 接受的是 Builder 类的子类

this.builder = builder; // 将子类保存至 builder 字段中

}

public void construct() { // 编写文档

builder.makeTtile(“Greeting”); // 标题

builder.makeString(“从早上至下午”); // 字符串

builder.makeTimes(new String[] { // 条目

“早上好”,

“下午好”

});

builder.makeString(“晚上”);

builder.makeTimes(new String[] {

“晚上好”,

“晚安”,

“再见”

});

builder.close();

}

}

TextBuilder

package Builder;

/**

  • 使用纯文本编写文档

*/

public class TextBuilder extends Builder{

private StringBuffer buffer = new StringBuffer(); // 文档内容保存在该字段中

public void makeTtile(String title) {

buffer.append(“=============================”); // 装饰线

buffer.append(“[” + title + “]\n”);

buffer.append(“\n”);

}

public void makeString(String str) { // 纯文本字符串

buffer.append(‘■’ + str + ‘\n’);

buffer.append(‘\n’);

}

public void makeTimes(String[] items) {

for (int i = 0; i < items.length; i++) {

buffer.append(" '"+ items[i] + “\n”);

}

buffer.append(“\n”);

}

public void close() {

buffer.append(“=============================”);

}

public String getResult() { // 编辑完成的文档

return buffer.toString(); // 将 StringBuffer 转换成 String

}

}

HTMLBuilder

package Builder;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

/**

  • 使用 HTML 编写文档

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值