创建对象,构建的过程支持配置化 只关注最终的结果,是一种链式编程
使用场景:StringBuilder,一个对象属性很多,如果构造的入参顺序和个数场景过多的情况下,原始的构造方法排列组合下来会有很多,这种场景比较适合使用建造者模式,过程配置化。
与工厂方式的区别,工厂方式注重对象结果 建造者注重对象过程 工厂创建的对象都是一样的 但是建造者模式因为创建过程可配 所以创建的结果可以不一样。
set方法 其实也可以认为是一种建造者模式 只不过不是链式编程
这里只是随笔,代码就不贴了,简单的说下写法吧
首先定义四个角色
产品:Product指需要创建对象的类
建造者抽象:Builder 定义一些方法,基于抽象是基本的编程思想
建造者:ProductBuilder具体的建造者抽象实现类,根据不同的业务做不同的实现,每个方法的返回值定义成建造者本身,就有了链式编程的效果。
调用者:Client 调用具体的建造者,创建产品的各个部分,这里可以制定产品各个部分的创建和创建的顺序
源码参考:org.elasticsearch.index.query.BoolQueryBuilder
建议在产品组成比较复杂的场景,不同的组装和执行顺序都会得到不同的结果下使用建造者设计模式,自己无法确定用户操作的情况下,就把主动权交给用户
原文:https://www.cnblogs.com/xianyi/p/14643811.html