设计模式(JAVA)——Builder模式

1. Builder模式

组装具有复杂结构的实例。正如建造一栋大楼,需要自下而上地一层一层的建造。我们需要做的是建造组成这个物体的各个部分,然后分阶段将它们组装起来。

1.1 Builder模式的类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LFgLiFng-1573563231462)(./resources/image/07/07-1_Builder.png)]

登场的角色

  • Builder(建造者)
    定义用于生成实例的接口(API),即定义了需要的各个组件。
  • ConcreteBuilder(具体的建造者)
    具体实现了Builder的接口(API)
  • Director(指导者)
    调用Builder的方法构造成所需的完整的对象。
  • Client(使用者)
    使用该模式的类

1.2 示例程序

类一览表

名字说明
Builder定义了最终对象结构的方法的抽象类
Director使用Builder建造最终的结果
TextBuilder一个实现了Builder的类
Main测试类

uml类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eFQEfFkv-1573563231464)(./resources/image/07/07-2.png)]

代码实现

Builder类

package xin.ajay.builder.impl;

public abstract class Builder {
    public abstract void makeTitle(String title);
    public abstract void makeString(String str);
    public abstract void makeItems(String... items);
    public abstract void close();
}

Director类

package xin.ajay.builder.impl;

public class Director {
    private Builder builder;

    public Director(Builder builder){
        this.builder = builder;
    }

    public void construct(){
        builder.makeTitle("Greeting");
        builder.makeString("早上——下午");

        builder.makeItems("早上号","下午好");

        builder.makeString("晚上");
        builder.makeItems("晚上好","晚安","再见");

        builder.close();
    }
}

TextBuilder类

package xin.ajay.builder.impl;

public class TextBuilder extends Builder {
    private StringBuilder builder = new StringBuilder();

    @Override
    public void makeTitle(String title) {
        builder.append("=======================\n");
        builder.append("〖"+title+"〗\n");
        builder.append("\n");
    }

    @Override
    public void makeString(String str) {
        builder.append("● ");
        builder.append(str);
        builder.append("\n");
        builder.append("\n");
    }

    @Override
    public void makeItems(String... items) {
        for (String item : items) {
            builder.append(" · " + item + "\n");
        }
        builder.append("\n");
    }

    @Override
    public void close() {
        builder.append("=======================\n");
    }

    public String getResult(){
        return builder.toString();
    }
}

Main类

package xin.ajay.builder.impl;

public class Main {
    public static void main(String[] args) {
        TextBuilder textBuilder = new TextBuilder();
        Director director = new Director(textBuilder);

        director.construct();

        String result = textBuilder.getResult();

        System.out.println(result);
    }
}
鸣谢

GoF《设计模式》和结城浩的《图解设计模式》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值