建造者模式
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(过程是稳定的)。
从建造者模式的定义来看,肯定是一头雾水,说的都是什么跟什么呀!举个小例来理解下:当我们来实现一个画画的功能,要求画瘦的人和胖的人。画的过程是稳定的,即:头、胳膊、身体、腿都是必须的。而画的具体实现是不一样的,例如:头大、肚子大、腿长等。这时再去理解建造者模式的定义就简单多了。
UML图:
Builder抽象类中定义各个部分的方法的抽象方法(例:定义了画胳膊、画头、画腿等方法)。
ConcreteBuilder类是各种不一样具体表示,它具体实现了Builder中的方法,并且返回一个结果。(例:实现了具体画怎样的头、胳膊、腿等,并返回构造的这个人)
product类是具体产品,即:要建造的产品。例:头、胳膊、腿等都是要建造人
代码:

//抽象建造者类 public abstract class Builder { public abstract void Head(); public abstract void Body(); public abstract void Leg(); }

//具体建造者类 class ConcreteBuilderA:Builder { private Person person = new Person(); public override void Head() { //do something person.Head = "A式头"; } public override void Body() { //do something person.Body = "A式身体"; } public override void Leg() { //do something person.Leg = "A式腿"; } public Person GetResult() { return person; } }

//具体建造者类 class ConcreteBuilderB:Builder { private Person person = new Person(); public override void Head() { //do something person.Head = "B式头"; } public override void Body() { //do something person.Body = "B式身体"; } public override void Leg() { //do something person.Leg = "B式腿"; } public Person GetResult() { return person; }

//产品类 class Person { public Object Head { set; get; } public Object Body { set; get; } public Object Leg { set; get; } }

//指挥者类 class Director { public void Construct(Builder builder) { builder.Head(); builder.Body(); } }
执行:
static void Main(string[] args) { Director director = new Director(); ConcreteBuilderA a = new ConcreteBuilderA(); director.Construct(a); Object p = a.GetResult(); }
上述执行代码中,首先创建执行者类,再创建一个具体建造者类,然后由执行者类调用Construct方法去执行建造。而最后通过具体建造者类的GetResult方法获得了建造的结果。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探