学习记录
建造者模式(Builder Pattern),又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同的对象。
使用场景
1. 需要生成的对象具有复杂的内部结构。
2. 需要生成的对象内部属性本身相互依赖。
3. 多个部件都可以装配到一个对象中,但产生的运行结果不相同。
4. 初始化一个对象,参数过多,或者很多参数具有默认值。
模式的结构与实现
1. 产品(Product):它是包含多个组件部件的复杂对象,由具体建造者来创建各个部件。
2. 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 finishBuild()。
3. 具体建造者(Concrete Builder):实现Builder接口,完成复杂产品的各个部件的具体创建方法。
4. 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
模式讲解:
1. 指挥者(Director)直接和客户(Client)进行需求沟通。
2. 沟通后指挥者将客户创建产品的需求交给抽象构造者(Builder)。
3. 抽象构造者将构造的信息交给具体的建造者(Concrete Builder)来进行产品的构建。
4. 最后由建造者(Concrete Builder)将构造出来的产品返回给客户。
注意:
建造者(Builder)模式在应用过程中可以根据需要改变,如果创建的产品种类只有一种,只需要一个具体建造者,这时可以省略掉抽象建造者,甚至可以省略掉指挥者角色。
例子:
一个订单类中包含了多个任务类,每个任务类有自己具体的执行逻辑和参数内容。在创建订单的时候需要根据业务需求添加具体的任务类,并给任务类初始化参数。由于这个过程的赋值和创建过程会由于业务逻辑创建出不同的订单,所以使用OrderBuilder类来创建订单类。
优点:
1. 使用建造者模式可以使客户端不必知道产品内部组成的细节。
2. 具体的建造者类之间是相互独立的,这有利于系统的扩展。
3. 具体的建造者相互独立,因此可以对建造的过程逐步细化,而不会对其他模块产生任何影响。
缺点:
如果构建的产品具有很大的差异性,就不适合用建造者模式。