【设计模式学习笔记】建造者模式

当构造函数里的参数很多,并且有很多是非必填的参数时,这些参数可以通过写单独的set()方法进行设置。必填的参数写在构造函数里。
先new一个对象出来,然后通过set()方法设置其他参数。
但是会有如下三个问题:
1,当必填参数很多的时候,构造函数里会写很多。如果将参数通过set()设置,则没法写参数的校验逻辑;
2,如果可选配置参数之间有依赖关系或者约束关系,则没法写校验逻辑;
3,如果对象是不可变对象(对象创建完成后,不可改变内部的属性),则不能暴露set()方法。

通过建造者模式可以解决上述三个问题:
创建一个内部类或者单独一个类Builder()专门用于参数的设置和校验,首先new一个Builder()的对象,设置各种参数。然后通过调用Build()方法进行参数的统一校验。

e.g.
Class ParentClass()

  • private ParentClass()
    self.a = a
    self.b = b
    self.c = c
    self.d = d

  • Class Builder()
    Build()
    set_a()
    set_b()
    set_c()
    set_d()

ParentInstance = ParentClass.Builder()
.set_a()
.set_b()
.set_c()
.set_d()
.Build()

建造者模式是封装了类的对象的创建过程,和工厂模式有何区别?
1,工厂模式是创建不同但是相关类型的对象,比如继承自同一个父类或者接口下的不同实现。由给定的参数决定创建哪个类的对象。
2,建造者模式是解决单个类的属性过多时的问题,先设置所有属性,然后统一校验,最后创建对象。

posted @ 2022-05-16 22:22  Shengjie  阅读(28)  评论(0编辑  收藏  举报