建造者模式(链式编程)
1.定义
指将一个复杂对象的构造与它的表示分离,使同样的构建过程 可以创建不同的表示
2.组成
- 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个组成部件
- 抽象建造者(Builder):引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
- 具体建造者(Concrete Builder):该角色实现抽象建造者中定义的所有方法,并且返回一个组件好的产品实例。
- 指挥者(Director):负责调用适当的建造者来组建产品,该类一般不与产品类发生依赖关系,与该类直接交互的是抽象建造者类。一般来说,指挥类被用来封装程序中易变的部分。
3.结构图
4.优缺点
优点:
①各具体的建造者相互独立,有利于系统的扩展。
②客户端不必知道产品内部组成的细节,便于控制细节风险。
③封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和具体建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。
④方便书写,相当于一个工具类Util,根据个人编写习惯
缺点:
①产品的组成部分必须相同,这限制了其使用范围。
②如果产品的内部变化复杂,该模式会增加很多的建造者类。
建造者模式 工厂模式的关注点不同,建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用。
③不是具体功能,没有提供具体功能
5.应用场景
- 复杂的内部结构
- 内部属性相互依赖
- 与不可变对象配合使用