【建造者模式】—— 构建与表现分离

建造者模式,将复杂对象的创建过程与它的表示分离,即容许用户在不知道对象内部细节的情况下,一步步创建对象的过程。并使得同样的构建过程可以创建不同的表示。

一、关键点

1)我们先来看下这个模式的关键点:

构建与表现分离:这是找个模式的比较明显的特征,即将构建负责对象的过程与它的部件解耦了;

构建过程:由于第一个特征,表现和构建分离,这样就使得同样的构建过程可以创建不同的表示。也能根据需要控制构建顺序或构建方法,而产生需要的结果;

 

2)我们再来看下它的类图关系:

Product:产品抽象类;

Builder:抽象Builder,定义构建的相关方法;

ConcreateBuilder:具体Builder实现类;

Director:构建使用Builder接口的对象;

 

二、实现

2.1 产品对象

public class Product {

    void doA() {
        /** do something 'A' */
    }

    void doB() {
        /** do something 'B' */
    }
}

2.2 抽象Builder

public interface Builder {

    void buildPartA();
    void buildPartB();
}

 2.3 构建Builder

public class ConcreteBuilder implements Builder {

    private Product mProduct = new Product();

    @Override
    public void buildPartA() {
        mProduct.doA();
    }

    @Override
    public void buildPartB() {
        mProduct.doB();
    }
}

2.4 Director 统一组装对象

public class Director {

    public void construct(Builder builder) {
        builder.buildPartA();
        builder.buildPartB();
    }
}

2.5 运用

    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director();
        director.construct(builder);
    }

三、小结

3.1 封装性。建造者模式具有良好的封装性,可以使客户端不需要知道产品的内部组成细节;

3.2 拓展性。客户端可灵感拓展Director,按需控制budiler构建过程和执行顺序,从而灵感控制构建过程;

3.3 优化。实际使用的过程中,Director往往被省略,而直接使用Builder的链式调用来进行构建。

                 该链式调用的特点就是每个对应的构建方法都return this,这样链式的调用使得整体结构更简单灵活

      链式调用的实现代码大致如下:

public class ProductObj {

    private final String mName;
    private final String mValue;

    private ProductObj(Builder builder) {
        this.mName = builder.name;
        this.mValue = builder.value;
    }

    public static class Builder {
        private String name;
        private String value;

        public Builder buildName(String nameObj) {
            this.name = nameObj;
            return this;
        }

        public Builder buildValue(String valueObj) {
            this.value = valueObj;
            return this;
        }

        public ProductObj build() {
            return new ProductObj(this);
        }
    }
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值