设计模式:builder 建造者模式

设计模式能很好的解决多参数构造复杂的问题,代码可读性高,易维护,缺点是过于冗长。其基本思想是在构造的类中,使用一个静态内部Builder类提供的build方法来构造该对象,Builder内部类对所有的参数有方法化。

https://blog.csdn.net/xu404741377/article/details/73699523
Builder模式介绍
Builder模式是一种一步一步创建一个复杂对象的设计模式,我认为这种设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型;其二,对于设计者来说,这是一个解耦的过程,这种设计模式可以将构建的过程和具体的表示分离开来。

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

Builder模式分析
我们为什么要把代码的构建和表示分离开来?1.增加代码的可读性;2.方便维护。举一个例子,安卓中非常常用的AlertDialog就是Builder模式,我们知道,一个Dialog可以有非常多的属性和参数,例如title,icon,message, positiveButton,negativeButton等十几个参数,如果这些参数都放在构造函数里,那么这个方法将会有很多参数,为了完成这个函数,需要一次性准备好所有的参数,很容易写着写着就乱了。同时为了适配,还需要写很多重载的构造函数,类会很乱。而如果使用builder模式,不需要一次性准备好所有的参数,完全可以一个一个准备,代码易懂,方便非常多。

举例说明
有一个Person类,有name,age,job,sex等等N多属性,这里我用s1,s2,s3…s10代替。
在这里插入图片描述
接下来在Person类的内部定义一个静态的Builder类,并且定义对应的s1-s10方法,方法返回类型都是Builder
在这里插入图片描述
最后,增加一个build()方法,将所有的属性都设置进去
在这里插入图片描述
代码的可读性高了很多,试想一下如果new了一个Person类,构造函数里传了10个参数,看起来就非常头疼,以后想改某一个值的话,还要去找代码看相应的含义。而Builder模式的可读性就非常高,只需要去修改相应的Builder静态类中的方法即可。

总结
Builder模式与传统的模式相比,并不是完全胜出的,相比之下,Builder模式的代码量会比正常多不少,但是随之带来的好处是代码的可读性和可维护性。但是,往往一个好的设计模式或架构,就是在牺牲某一种能力从而大大增强另一种能力,例如,牺牲一定的可读性,增加项目的可扩展性等等这样的方式。因此,在参数较为复杂,构造对象相对繁琐的情况下,一定要首先考虑使用Builder模式。

猜你喜欢

转载自blog.csdn.net/m0_37657556/article/details/82781035