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


    当构造函数里的参数很多,并且有很多是非必填的参数时,这些参数可以通过写单独的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,建造者模式是解决单个类的属性过多时的问题,先设置所有属性,然后统一校验,最后创建对象。

  • 相关阅读:
    NOIP2020 游记
    李超线段树
    选举「elections」
    Alt+数字输入
    素数
    CSP-S2020 爆炸记
    [CF487C] Prefix Product Sequence
    [CF489E] Hiking
    L2-019 悄悄关注 (25 分)
    L2-032 彩虹瓶 (25 分)
  • 原文地址:https://www.cnblogs.com/liushengchieh/p/16278846.html
Copyright © 2020-2023  润新知