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构建者模式建筑