详解java构建者模式建筑

  

  

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

  

作为复杂对象可能有很多组成部分,比如汽车有车轮,方向盘,发动机,变速箱还有各种小零件等,如何将这些部件组装成一台汽车,这个装配的过程漫长且复杂,对于这种情况,为了对外部隐藏实现细节,就可以使用Builder模式将部件和组装过程分离,使得构建过程和部件分离可自由扩展,两者之间的耦合也降到最低

  

  

1,相同的方法,不同的执行顺序,产生不同的事件结果时

  

2,多个部件或零件都可以组装到一个对象中,但产生的结果不相同时

  

3,产品类非常复杂,或者产品类中的调用顺序不同产生不同的作用,这个时候使用Builder模式非常合适

  

4,当初始化一个对象特别复杂,比如参数多,且很多参数都具有默认值时。

  

  

产品产品类- - - - - - - - - - - -产品的抽象类

  

建筑- - - - - - - - - - - - - - - - - -抽象构建器类,规范产品的组建,一般是由子类实现具体的构建过程

  

ConcreteBuilder - - - - - - -具体生成器类

  

主管- - - - - - - - - - - - - - - - - -统一组装过程

        包com.example.myjavademo;/* *   *计算机的组装过程较为复杂,并且组装过程不固定,为了易于理解,我们把计算机组装过程简化为   *构建主机,设置操作系统,设置显示器3步,然后通过主战场和具体生成器来构建计算机对象   *   */公开课BuilderDesignDemo {   公共静态void main (String [] args) {//方式一   Builder构建器=new MACBookBuilder ();   导演导演=新主任(施工);   AOC director.construct(“英特尔”、“”);   .toString System.out.println (builder.create () ());//方式2所示   system . out。println(新MACBookBuilder ()。   buildBoard(“英特尔”).buildDisplay (AOC)共创().toString ());         }   }/* *   *计算机抽象类,即产品角色   */抽象类计算机{      保护字符串mBoard;   保护字符串mDisplay;   保护字符串金属氧化物半导体;   受保护的计算机(){      }   公共空间setBoard(字符串){//具体什么实现进行了隐藏      this.mBoard=董事会;   }   公共空间setDisplay(字符串显示){//具体什么实现进行了隐藏   this.mDisplay=显示;   }   公共抽象空洞濑户();      @Override   公共字符串toString () {   返回“电脑:=" + mBoard +”=" +金属氧化物半导体+”=" + mDisplay;   }   }/* *   *具体的计算机类   */类MACBook电脑{延伸   保护MACBook () {};   @Override   公共空间濑户(){   金属氧化物半导体=" MAC OS X”;   }   }/* *   *抽象构建器类   */抽象类构建器{//设置主机   公共抽象Builder buildBoard(字符串);//设置操作系统   公共抽象Builder buildOS ();//设置显示器   公共抽象Builder buildDisplay(字符串显示);//创建计算机   公共抽象计算机创建();   }/* *   *具体构建器类,MACBookBuilder   */类MACBookBuilder扩展生成器{   私人电脑电脑=新MACBook ();      @Override   公共建筑buildBoard(字符串){   computer.setBoard(板);   返回;   }      @Override   公共建筑buildOS () {   computer.setOS ();   返回;   }      @Override   公共建筑buildDisplay(字符串显示){   computer.setDisplay(显示);   返回;   }      @Override   公共计算机create () {//Mac的操作系统肯定是Mac OS的;这部分对外部隐藏   computer.setOS ();   返回计算机;   }   }/* *   *主管类,负责构建计算机   */类{主任   Builder构建器=零;      公共主管(Builder构建器){   这一点。builder=建设者;   }/* *   *构建对象   */公共空间构造(字符串,字符串显示){   builder.buildBoard(板);   builder.buildDisplay(显示);      }   }      之前      

上述示例中,通过具体的MacBoookBuilde来构建具体的MacBook对象,而导演封装了构建复杂产品对象的过程,对外隐藏构建细节.Builder和导演一起将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的对象。

  

值得注意的是,在现实开发过程中,导演角色经常被省略。而直接使用建筑来进行对象的组装,这个Builder通常为链式调用,他的关键点是每个setter都返回自身,也就是返回,这样的setter方法可以链式调用,如以上方式二,通过这种方式不仅去除董事了角色,这个结构也更加简单,也能对普氏对象的组装过程有更精细的控制

详解java构建者模式建筑