GoF定义:“将一个复杂对象的构建流程与它的对象表现分离出来,让相同的构建流程可以产生不同的行为表现”。
在《设计模式游戏完美开发》一书中的说明,有用到模板方法进行调用建造者的接口(子流程),但是那并不是模板方法,仅仅只是一个十分类似的做法而已,因为模板方法是模板基类调用子类的接口,而不是调用第三方(建造者)的接口,这一点是有区别的
回归本章重点,建造者实际上也是和模板模式一样,要从复杂的“算法逻辑”中抽象划分出子算法逻辑(子流程),然后方便外部调用这些子流程,但是,区别在于这些子流程的调用顺序是比较独立的,而不是类似于之前模板模式那样那么死板,因为调用顺序并没有太大的约束,模板基类是会决定如何调用子流程的,哪个先执行,哪个后执行都在一个基类决定好了,而建造者没有这一条约束。
举一个栗子:
还是以制作铅笔来说吧,因为我觉得它这个流程也没必要在模板基类进行约束,即
制作铅笔 需要抽象分为三个流程 : 制作笔芯 、制作外壳 、 组装
模板模式会在一个基类方法中固定死 是先制作笔芯 然后制作外壳,最后组装 得到一支笔。
而建造者仅仅只是实现这三个流程,外部可以 先制作外壳 再进行制作笔芯 ,最终组装。
建造者一般是运用在工厂模式中,当一个产品的制作流程比较复杂时,而且制作流程的顺序允许灵活变动的,那么使用建造者能更好地解耦代码,将复杂的建造逻辑放于建造者内部,外部只需传递相关参数并调用接口即可产生出一个产品,这样工厂就只需关心自己的逻辑,一般工厂关心的是资源加载和数据处理等方面的事情,而建造者是获取数据后根据一定的业务逻辑组拼出一个产品,可以说建造者才是制作产品的核心。