一篇文章教你彻底了解建造者模式

定义:

Separate the construcation of a complex object from its representationso that the same construction process can create different representation.

将一个复杂对性的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

理解:官方解释有点抽象,通俗的说法就是当业务场景需要根据不通的顺序产生不通的效果,生成不同的类的时候我们需要使用建造者模式。

建造模式需要四个部分去实现。我们一一说明:

product产品类:通常会实现所有的方法。

package com.kaisen.mainland.Text;

/**
 * @author huzhibo
 * @Description: 演示产品类
 * @date 2020/9/6 14:07
 */
public class Product {
    public void start(){
        System.out.println("开始");
    }
    public void doThing(){
        System.out.println("一类步骤:产品的业务逻辑");
    }
    public void doPackage(){
        System.out.println("二类步骤:产品的包装");
    }
    
    public void end() {
        System.out.println("结束");
    }
}

抽象建造者Builder:暴露接口的抽象类,不会有具体的实现,可以用接口来代替

package com.kaisen.mainland.Text;

/**
 * @author huzhibo
 * @Description: 抽象建造者
 * @date 2020/9/6 14:13
 */
public abstract class Builder {
    /**
     * 设置产品属性(是否需要包装)
     * @param b
     */
    public abstract void setPackage(Boolean b);

    /**
     * 建造产品
     * @return
     */
    public abstract Product buildProduct();

}
建造者实现类ActualBuilder,针对抽象类进行实现。
package com.kaisen.mainland.Text;

/**
 * @author huzhibo
 * @Description: 实际的建造者
 * @date 2020/9/6 14:17
 */
public class ActualBuilder extends Builder{
   private Product product =  new Product();

    @Override
    public void setPackage(Boolean b) {
        product.start();
        product.doThing();
        if (b){ product.doPackage();}
        product.end();
    }

    @Override
    public Product buildProduct() {
        return product;
    }

}

导演类:对外保留的类,业务需求会根据不同的逻辑去导演类中创建不通的对象来实现。

package com.kaisen.mainland.Text;

/**
 * @author huzhibo
 * @Description: 导演类(对外暴露)
 * @date 2020/9/6 16:03
 */
public class Director {
    private Builder builder = new ActualBuilder();
    public Product getNoPackage(){
        //生成出一个没有包装的产品
        builder.setPackage(false);
        return builder.buildProduct();
    }
    public Product getPackage(){
        builder.setPackage(true);
        return builder.buildProduct();
    }
}

建造者模式实例就结束了,那么问什么要使用建造者模式呢。我们在业务代码中直接使用接口或者抽象类去创建对象不好吗,是的,在本文的实例中是可以这样操作的,但是业务代码往往比我们实例中复杂的多,假如需要对顺序不同,生成不通的产品呢,业务代码就必须关注每个顺序,复用性很差,业务代码重。所以建造者模式需要结合业务场景判断有无使用的必要。

综上所示,我们总结了建造者模式的有点:封装,独里可扩展,控制风险。

思考:建造者模式和工厂模式的区别。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值