设计模式01 创建型模式 - 建造者模式(Build Pattern)

参考

1. Builder Design Pattern | Youtube

建造者模式(Builder Pattern)

将一个复杂对象的构建与表示分离,使得同样的构建过程可以不同的表示。

通常,在建造者Builder中包含多个不同的属性(基本类型或者别的类对象),这些属性由Builder的方法构建,由Director来组装出一种产品Product。 也就是说,Builder Pattern的目的是为了构建一个或多个Product,不同的构建过程可以表示不同Product。每一个Builder至少代表了一种不同属性的组合,以组装成产品。

适用场景[参考1]:建造者模式用于创建的Product对象,由其他多个对象组成。

1)当你想建造的对象由其他对象组成;

2)当你想这些组件的创建独立于主要对象;

3)隐藏来自client的部分的创建,以至于这部分和创建对象是相互独立的;

4)建造者知道细节,并且别人不知道;

通俗讲,当自己想创建的对象由多个其他类对象组成,并且希望自己创建的对象独立于其他对象的创建,用户不必知道创建这个对象的细节,只需要指定特定Builder来负责建造组件、Director负责何时组装以及如何组装即可。

特点:

Product由别的多个不同的子对象组成;

Product的组成部分对象的创建细节与组件的组装(成产品)相分离,不同的构建过程可以表示不同的Product;

一个具体的Builder对应一个或者多个Product;

缺点:

不适合包含同类别子对象的Product创建,如组合模式;

当Product增加属性时,可能会导致Builder及其子类, Director的大量修改;

当Product类别较多时,会导致创建的Builder过多;

与工厂模式,抽象工厂比较

工厂模式:提供统一的抽象接口,让子类决定实例化哪一个类,使对象的初始化延迟到子类进行。

抽象工厂:为创建一组相关或者相互依赖的对象提供一个接口,而无需指定他们具体的类。

1. 建造者 vs 工厂模式

工厂模式通常只生产一种产品,而且产品之间没有必然联系。侧重于表示接口和Product之间的关系。

建造者模式可以产生一种或多种产品,不同的构建过程可以表示不同Product。侧重于表示构建的过程(包括Director传入Builder的参数和创建组件的顺序)。

2. 建造者 vs 抽象工厂

抽象工厂往往会产出多个Product,并且多个Product之间存在一定关联或者依赖关系。每个具体Product要求用工厂来创建。侧重于表示一组方案。

抽象工厂的具体工厂生产产品,可以用Builder模式来创建。

建造者模式通常产生一种产品(也可以支持多种),不同的构建过程可以表示不同Product,Builder属性不要求用工厂来实现。侧重于表示构建的过程。

通用类图

猜你喜欢

转载自www.cnblogs.com/fortunely/p/9556595.html
今日推荐