设计模式——建造者模式

定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

生成器模式UML图

Builder: 建造者接口,定义创建一个Product对象所需的各个部件的操作
ConcreteBuilder: 具体的建造者实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法
Director: 指导者,也被成为导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象
Product: 产品,表示被建造者构建的复杂对象,包含多个部件

/**
* 建造者接口,定义创建一个产品对象所需的各个部件的操作
*/
public interface Builder {
    /**
     * 示意方法,构建某个部件
     */
    public void buildPart();
}

/**
* 被构建的产品对象的接口
*/
public interface Product {
    //定义产品的操作
}

/**
* 具体的建造者实现对象
*/
public class ConcreteBuilder implements Builder {
    /**
     * 建造者最终构建
     */
    private Product resultProduct;

    public Product getResultProduct() {
        return resultProduct;
    }

    @Override
    public void buildPart() {
        //构建某个部件的功能处理
    }
}

/**
* 指导者,指导使用建造者的接口来构建产品的对象
*/
public class Director {
    /**
     * 持有当前需要使用的建造者对象
     */
    private Builder builder;

    /**
     * 构造方法,传入建造者对象
     * @param builder 建造者对象
     */
    public Director(Builder builder) {
        this.builder = builder;
    }

    /**
     * 示意方法,知道建造者构建最终的产品对象
     */
    public void construct() {
        //通过建造者接口来构建最终的产品对象
        builder.buildPart();
    }
}

建造者模式的主要功能是构建复杂的产品,而且是细化的、分步骤的构建产品,也就是建造者模式重在一步一步解决构造复杂对象的问题。这个构建的过程是统一的、固定不变的,变化的部分放到建造者部分,只要配置不同的建造者,那么同样的构建过程,就能构建出不同的产品来。

需要注意的是,建造者模式分为两个重要的部分
1. 一部分是Builder接口,这里定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品去
2. 另外一个部分是Director,Director是知道如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤地来执行


在实际开发时,如果建造者对象和被构建的对象是分开的话,可能导致同包内的对象不使用建造者来构建对象,而是直接去使用new来构建对象,这会导致错误,另外,建造者的功能就是为了创建被构建的对象,完全可以不用单独一个类。对于这种情况,重构的手法通常是类内莲花放到类里面,也就是说吧构建器对象合并到被构建对象里面去。

生成器模式的优点:
松散耦合
可以很容易改变产品的内部表示
更好的复用性

生成器模式的本质是分离整体构建算法和部件构造

这里推荐两篇关于建造者模式非常深入描述的文章,不但将建造者模式叙述的深入浅出,对于建造者模式的应用场景分析非常细致和深入,值得学习

设计模式(九)——建造者模式

设计模式(十)——建造者模式的实践

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值