Builder 模式

Builer 模式是一步一步创建一个复杂对象的创建型模型,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来。




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




适用场景:


  • 相同的方法,不同的执行顺序,产生不同的事件结果时。
  • 多个部件或零件,都可以装配到一个对象中,但是产生的运行效果又不同时。
  • 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候使用建造者模式非常适合
  • 当初始化一个对象特别复杂,如参数较多,且很多参数都具有默认值时。









Builder 模式的简单实现:


        一个 abstract 修饰的 产品基类: 比如 public abstract class Computer


        一个我所需要的具体的 产品 : public dell extends Computer


        一个抽象的 Builder 基类 :public abstract class Builder   其中有抽象的 create()、和各种builde方法


        一个具体的 Builder 类 :public abstrct class DellBuilder extends Builder  实例化父类的抽象方法  


        最后 是一个加工类  ,就是使用Builder的地方: 在需要的地方调用DellBuilder的各种Builde方法  








    在实际开时 ,加工类常常省略,而直接使用builder类进行对象的封装,这个Builder通常为链式调用,它的关键点是每个setter方法都返回自身,也就是return this 




Dell dell =  new DellBuilder().setA("A").setB("B").create();


其实就是在builder的set方法中最后 return this  返回这个builder对象;

在create()函数中返回 builder所build的对象。






Builder模式的优缺点:

    

    优点:


  •      良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节。
  •      建造者独立,容易扩展。


    缺点:


  •     会产生多余的Builder对象,以及 使用Builder的Diretor对象。