一、驱动力构建复杂对象属性多、可选参数多时用构造函数构建会导致敲码易出错、可读性不高、等。 由此引入建造者模式来改善问题。建造者模式可看作 构造函数的 补充方案使用构造函数new构建对象是面对绝大多数对象的最基础、最通用的方案。一旦对象复杂了参数多、可选、最好分步创建的构造函数就不够用了这时候建造者模式作为它的补充方案上场。归纳相比构造函数① 可读性更高② 改进可选参数的配置不灵活问题③ 拆分臃肿的构造函数为清晰的构建步骤二、举例一个电脑对象包含属性CPU、显卡、内存、硬盘、电源、显示器、键盘、鼠标、机箱、喇叭 ......等等很多属性例如喇叭、显示器等可以不要。1. 如果使用构造函数new Computer(i9, 3090, 16G, 1T, Null , 黑色, 500W , Null ......);会带来几个问题① 参数十几个顺序不能错传错一个出 bug。② 读代码时一眼看去哪个是内存、哪个是硬盘③ 有的电脑不要喇叭、有的不要显示器。是约定好让不要就传Null还是说让一些参数默认 null 还是说重载多个构造函数2. 建造者怎么解决引入一个电脑建造者ComputerBuilder指挥它干活建造我想要的对象Computer pc new ComputerBuilder() .cpu(i9) .gpu(3090) .ram(16G) .build();带来好处① 代码一眼清晰明了、不要的参数就不要不用传null什么的② 将原本堆积到构造函数中的所有逻辑代码拆分了一下更简单、灵活build() 时可统一校验一下传入的对象是否都合法兼容。三、其他要点1、 建造者模式——天然适合「固定步骤、顺序不能乱、分步组装」的对象例如造房子的4 步① 打地基 ② 砌墙 ③封顶 ④装修必须先打地基 → 再砌墙 → 再封顶 → 最后装修这时候可以有一个指挥者来固定一套 “组装步骤顺序”让建造者照着顺序干活。2、建造者模式——核心思想将复杂对象的构建过程与表示最终成品分离用相同的构建步骤生成不同的对象。如何理解拆开翻译1. 构建过程 制作步骤比如造房子固定就这4 步打地基砌墙封顶装修这就是构建过程步骤永远不变。2. 表示最终成品 造出来的东西例如普通平房豪华别墅高楼大厦这就是不同的成品同样 4 步传入参数不同可以造出不同的房子。3. 分离意思就是步骤是步骤房子是房子我只管按固定 4 步盖 至于盖出来是平房还是别墅互不干扰。3、为什么不直接new出对象并依次 属性赋值因为这样对象就是可变的了new 出来后你可以修改别人也可以随便改线程不安全、容易被篡改。当然如果是单线程的、可忽略安全性项目也可以如此。C# 有 new 对象{属性A xxx 属性B xxx......} 这种写法。
设计模式 - 建造者模式 笔记
发布时间:2026/5/21 1:24:30
一、驱动力构建复杂对象属性多、可选参数多时用构造函数构建会导致敲码易出错、可读性不高、等。 由此引入建造者模式来改善问题。建造者模式可看作 构造函数的 补充方案使用构造函数new构建对象是面对绝大多数对象的最基础、最通用的方案。一旦对象复杂了参数多、可选、最好分步创建的构造函数就不够用了这时候建造者模式作为它的补充方案上场。归纳相比构造函数① 可读性更高② 改进可选参数的配置不灵活问题③ 拆分臃肿的构造函数为清晰的构建步骤二、举例一个电脑对象包含属性CPU、显卡、内存、硬盘、电源、显示器、键盘、鼠标、机箱、喇叭 ......等等很多属性例如喇叭、显示器等可以不要。1. 如果使用构造函数new Computer(i9, 3090, 16G, 1T, Null , 黑色, 500W , Null ......);会带来几个问题① 参数十几个顺序不能错传错一个出 bug。② 读代码时一眼看去哪个是内存、哪个是硬盘③ 有的电脑不要喇叭、有的不要显示器。是约定好让不要就传Null还是说让一些参数默认 null 还是说重载多个构造函数2. 建造者怎么解决引入一个电脑建造者ComputerBuilder指挥它干活建造我想要的对象Computer pc new ComputerBuilder() .cpu(i9) .gpu(3090) .ram(16G) .build();带来好处① 代码一眼清晰明了、不要的参数就不要不用传null什么的② 将原本堆积到构造函数中的所有逻辑代码拆分了一下更简单、灵活build() 时可统一校验一下传入的对象是否都合法兼容。三、其他要点1、 建造者模式——天然适合「固定步骤、顺序不能乱、分步组装」的对象例如造房子的4 步① 打地基 ② 砌墙 ③封顶 ④装修必须先打地基 → 再砌墙 → 再封顶 → 最后装修这时候可以有一个指挥者来固定一套 “组装步骤顺序”让建造者照着顺序干活。2、建造者模式——核心思想将复杂对象的构建过程与表示最终成品分离用相同的构建步骤生成不同的对象。如何理解拆开翻译1. 构建过程 制作步骤比如造房子固定就这4 步打地基砌墙封顶装修这就是构建过程步骤永远不变。2. 表示最终成品 造出来的东西例如普通平房豪华别墅高楼大厦这就是不同的成品同样 4 步传入参数不同可以造出不同的房子。3. 分离意思就是步骤是步骤房子是房子我只管按固定 4 步盖 至于盖出来是平房还是别墅互不干扰。3、为什么不直接new出对象并依次 属性赋值因为这样对象就是可变的了new 出来后你可以修改别人也可以随便改线程不安全、容易被篡改。当然如果是单线程的、可忽略安全性项目也可以如此。C# 有 new 对象{属性A xxx 属性B xxx......} 这种写法。