生活中有着很多的 Builder 的例子,个人觉得大学生活就是一个 Builder 模式的最好体验:
要完成大学教育, 一般将大学教育过程分成4 个学期进行, 因此没有学习可以看作是构建完整大学教育的一个部分构建过程, 每个人经过这
4 年的( 4 个阶段) 构建过程得到的最后的结果不一样, 因为可能在四个阶段的构建中引入了很多的参数(每个人的机会和际遇不完全相同)
Builder 模式要解决的正是这样的问题:当我们要创建的对象很复杂的时候(通常是
由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示( 展示)分
离开来, 这样做的好处就是通过一步步的进行复杂对象的构建, 由于在每一步的构造过程中
可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。
模式选择
builder模式典型结构图为:
Builder 模式结构图角色介绍
Product 产品类 : 产品的抽象类;
Builder : 抽象类, 规范产品的组建,一般是由子类实现具体的组件过程;
ConcreteBuilder : 具体的构建器;
Director : 统一组装过程(可省略)。
Builder负责Product类对象的具体过程构建,Director负责指导Build,要求Builder按照其指定的顺序去完成Produt的构造。最后通过Builder返回建造后的结果。网上有人对此种模式进行了形象的类比。
和抽象工厂模式比较
两者之间的区别是非常明显的,而我认为两者之间最本质的区别是,抽象工厂通过不同的构建过程生成不同的对象表示,而Builder模式通过相同的构建过程生成不同的表示。GOF中的区别是这样表示: Builder 模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说Builder 模式中对象不是直接返回的。而在 AbstractFactory 模式中对象是直接返回的,AbstractFactory 模式强调的是为创建多个相互依赖的对象提供一个同一的接口。
builder 也是一个高层建筑,但是他和Abstract Factory侧重点不同,Abstract Factory侧重于创建东西的结果,而builder侧重的是创建东西的过程。当你需要做一系列有序的工作来完成创建一个对象时 builder就派上用场啦。
Builder模式是抽象工厂模式的再封装,不但实现了创建过程的隐藏,甚至连创建过程该有那个方法实现都不必再去考虑,这样我们可以更加黑盒的去构建不同的对象。但事实上,两种模式有本质的区别,Builder模式的使用前提是被创建的对象之间有紧密的关系,属于同一类对象,当组成对象类型不同的时候,Builder模式就显得力不从心了,这是就需要配合抽象工厂模式来构建由不同类型的对象构成的对象了。
网友评论