概念:建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离
使用建造者模式的场景和优缺点:
使用场景
当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
相同的方法,不同的执行顺序,产生不同的事件结果时。
多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能。
创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
当构造一个对象需要很多参数或者参数的个数和类型不固定的情况下
开源框架(okhttp,Glide等)
优缺点
优点:
1、更好的复用性,生成器模式很好的实现构造算法和具体产品实现的分离
2、具体的建造者类之间是相互独立的,容易扩展。
3、可以很容易的改变产品的内部表示
缺点:
1、产生多余的Build对象以及Dirextor类,消耗内存
2、对象的构造过程暴露
例如:我们要DIY一台计算机,对于CPU、主板或者其他部件什么牌子的,什么配置的,我们根据自己的需求来进行变化,但是这些部件组装成一台电脑的过程都是一样的,我们无需知道这些部件是怎么组装成电脑的,我们只需要提供相关部件的牌子和配置就可以了。对于这种情况我们可以采用建造者模式,将部件和组装过程分离,使得构造过程和部件都可以自由扩展,将两者之间的耦合降低到最低。
在建造者模式中有如下角色:
Dirextor: 指挥者类,用于统一组装流程
Builder: 抽象Builder类,规范产品的组建,一般是由子类实现。
ConcreteBulider: 抽象Builder类的实现类,实现抽象Builder类定义的所有方法,并且返回 一个组建好的对象
Product: 产品类
代码实例:
1)创建产品类
我要组装一台电脑,电脑被抽象为Computer类,它有三个部件:CPU 、主板和内存。并在里面提供了三个方法分别