设计模式之Builder模式

Builder模式

简介

分类

解决问题

适用场景

需要生成的实例结构复杂

示例程序的类图

解析

该示例一共涉及到了4个角色,分别为Builder建造者、ConcreteBuilder具体的建造者、Director监工、Client使用者。

Builder的作用在于面向抽象类和接口编程这一思想,而Director与Builder的关系,就如同父类与子类一般,因为虽然Director并不是Builder的父类,但是它就像Template模式中,父类定义方法以及使用方式,由子类去实现具体的方法。在这只不过将Templa方法中,定义方法和使用方式两种职能分开。来看一下,Director的类。

public class Director {
    private Builder builder;

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

    public void construct() {
        builder.makeTitle("Greeting");
        builder.makeString("从上午至下午");
        builder.makeItems(new String[] {
                "上午好",
                "下午好"
        });
        builder.makeString("晚上");
        builder.makeItems(new String[] {
                "晚上好",
                "晚安",
                "再见"
        });
        builder.close();
    }
}

可以看出,Director注入Builder后,由一个construct方法来具体的执行生成文档这一需求。这与Template模式中,由一个templateMethod来执行需求一样。

书中将Builder称为建造者,在我看来,Builder更像是建造经验,内定义了作为建筑而言可能会出现的步骤,ConcreteBuilder是建筑图纸,Director是建造流程,对建筑流程做具体定制。流程引用建造经验中的步骤,图纸用来具体设计建筑内容,并且内根据建造经验结合实际需求进行了定制化,之后统一整合进流程之中,最后再由客户调用流程完成需求。

总结

Builder模式似乎来源于生活中的建筑过程,将传统的建造过程抽象成为一种通用的设计模式,来完成复杂的实例生成,从而实现需求。使得代码的可读性更强,流程更清晰。让笔者好奇的地方在于,将Template模式中父类的职能划分给了两个类,用来执行不同的功能的意义在哪,此处似乎可以将Director的construct写进Builder内,但是该案例和模式的类图并没有这么做,之后我思考了一下,用我总结的方式来理解这个模式,那就是建筑过程可能还会糅合其他的类,比方说用到了物理学的理论,那就不单单只是引用了建筑经验而已。例子或许举的不恰当,但是体现的思想便是,建筑过程并不完全依赖于单一的建筑经验。

类图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值