C#怎么实现Builder模式_C# Builder设计模式实现方法教程【技巧】

尼克

尼克

2026-04-20

214人浏览

原创

c#中最实用的builder实现是链式withxxx()方法+私有字段+build()终态校验;所有with方法返回this、字段私有、校验和副作用仅在build()中执行,并设_isbuilt标志防止重复调用。

c#怎么实现builder模式_c# builder设计模式实现方法教程【技巧】

直接用链式 WithXxx() 方法 + 私有字段 + Build() 终态校验,是 C# 里最实用、最不容易翻车的 Builder 实现方式。别一上来就搞抽象类和 Director,90% 的业务场景根本用不上。

Builder 类必须返回 this 才能链式调用

链式调用不是语法糖,是 Builder 可读性的基础。如果每个设置方法返回 void 或新建实例,就失去“一口气配完”的表达力。

  • WithSize()WithCheese() 等方法必须返回 this,且不能 new 新 Builder 实例
  • 所有字段声明为 private,不暴露 setter,防止外部绕过 Builder 直接改状态
  • 不要在 WithXxx() 里做校验或副作用(比如连接数据库),这些逻辑属于 Build() 阶段

Build() 是唯一出口,必须做终态校验

构造逻辑的完整性、合法性、不可变性,全靠 Build() 把关。分散校验等于没校验。

C函数速查手册(CHM版)
C函数速查手册(CHM版)

C函数速查手册(CHM版)

下载
  • 检查必填字段是否已设置,例如 if (_toppings.Count == 0) throw new InvalidOperationException("At least one topping is required.")
  • private bool _isBuilt 标志,防止重复调用 Build() 导致状态污染
  • 返回对象时尽量用只读封装,比如 _toppings.AsReadOnly()IReadOnlyList<string></string>,切断外部修改通路
  • 如果 Product 类本身要不可变,就用私有构造函数 + 公共只读属性,所有值由 Build() 一次性传入

别急着抽象出 IBuilderDirector

抽象接口和指挥者模式只在“多个 Builder 复用同一构建流程”时才有价值。多数项目里,一个 Builder 对应一个 Product 就够了。

  • 过早提取 abstract class PizzaBuilderinterface IBuilder<t></t>,反而让调用方多一层转换,还容易把 Product 构造细节泄露进 Builder
  • Director 类(比如控制“先加面团再加料”顺序)只在算法稳定、表示多变的场景才需要,比如配置中心生成不同环境的 ConnectionSettings
  • 真正该警惕的是:Builder 里出现 new Pizza() 或直接给 Product 字段赋值——这说明你把创建逻辑又塞回去了,Builder 只剩个壳

最容易被忽略的一点:Build() 不只是“造对象”,它还是“封口”动作。一旦调用,Builder 就该进入只读状态;否则多人协作时,有人顺手又调了一次 WithTopping(),再 Build(),结果就是脏数据或异常行为。

相关专题

更多
c#是什么意思
c#是什么意思

C#是一种通用的面向对象编程语言,它在.NET框架上运行,可用于开发各种类型的应用程序。本专题为大家提供c#相关的各种文章、以及下载和课程。

2023.08.08

527

5

什么是c#
什么是c#

C#(读作C Sharp)是一种现代的、通用的、面向对象的编程语言。它由微软公司开发,于2000年首次发布,主要用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是一种类型安全和托管的编程语言,它结合了C++的强大性能和C语言的简单易学特点,并引入了许多新的特性和概念,如委托、属性、泛型和异步编程等,以提高开发效率和代码可维护性。

2023.08.31

1135

3

C#中base关键字的用法
C#中base关键字的用法

在C#中,base关键字用于访问当前类的基类成员,这包括基类的字段、属性、方法、构造函数、索引器以及事件。想了解更多C#的相关内容,可以阅读本专题下面的文章。

2024.03.13

556

8

C#Task用法
C#Task用法

Task在C#中是用于表示异步操作的对象,它位于System.Threading.Tasks命名空间中。想了解更多C#中各种用法的相关内容,可以阅读本专题下面的文章。

2024.03.14

1049

11

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

2026.02.03

147

18

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

2026.02.06

202

20

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

2026.03.11

526

24

C# Unity游戏开发与ECS架构实践
C# Unity游戏开发与ECS架构实践

本专题聚焦 C# 在 Unity 游戏开发中的应用,系统讲解 ECS(Entity-Component-System)架构设计、游戏对象管理、性能优化与内存控制策略。通过实际游戏案例,帮助开发者构建高性能、结构清晰的游戏系统,提高游戏开发效率与运行性能。

2026.04.13

136

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
RabbitMQ 教程手册
RabbitMQ 教程手册

共0课时 | 0人学习

Linux man-pages 项目
Linux man-pages 项目

共0课时 | 0人学习

C# 教程
C# 教程

共94课时 | 20.2万人学习