建造者模式
using System; using System.Collections.Generic; using System.Linq; using System.Text; /// <summary> /// 以组装电脑为例子 /// 每台电脑的组成过程都是一致的,但是使用同样的构建过程可以创建不同的表示(即可以组装成不一样的电脑,配置不一样) /// 组装电脑的这个场景就可以应用建造者模式来设计 /// </summary> namespace 设计模式之建造者模式 { /// <summary> /// 客户类 /// </summary> class Customer { static void Main(string[] args) { // 客户找到电脑城老板说要买电脑,这里要装两台电脑 // 创建指挥者和构造者 Director director = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcreteBuilder2(); // 老板叫员工去组装第一台电脑 director.Construct(b1); // 组装完,组装人员搬来组装好的电脑 Computer computer1 = b1.GetComputer(); computer1.Show(); // 老板叫员工去组装第二台电脑 director.Construct(b2); Computer computer2 = b2.GetComputer(); computer2.Show(); Console.Read(); } } /// <summary> /// 小王和小李难道会自愿地去组装嘛,谁不想休息的,这必须有一个人叫他们去组装才会去的 /// 这个人当然就是老板了,也就是建造者模式中的指挥者 /// 指挥创建过程类 /// </summary> public class Director { // 组装电脑 public void Construct(Builder builder) { builder.BuildPartCPU(); builder.BuildPartMainBoard(); } } /// <summary> /// 电脑类 /// </summary> public class Computer { // 电脑组件集合 private IList<string> parts = new List<string>(); // 把单个组件添加到电脑组件集合中 public void Add(string part) { parts.Add(part); } public void Show() { Console.WriteLine("电脑开始在组装......."); foreach (string part in parts) { Console.WriteLine("组件"+part+"已装好"); } Console.WriteLine("电脑组装好了"); } } /// <summary> /// 抽象建造者,这个场景下为 "组装人" ,这里也可以定义为接口 /// </summary> public abstract class Builder { // 装CPU public abstract void BuildPartCPU(); // 装主板 public abstract void BuildPartMainBoard(); // 当然还有装硬盘,电源等组件,这里省略 // 获得组装好的电脑 public abstract Computer GetComputer(); } /// <summary> /// 具体创建者,具体的某个人为具体创建者,例如:装机小王啊 /// </summary> public class ConcreteBuilder1 : Builder { Computer computer = new Computer(); public override void BuildPartCPU() { computer.Add("CPU1"); } public override void BuildPartMainBoard() { computer.Add("Main board1"); } public override Computer GetComputer() { return computer; } } /// <summary> /// 具体创建者,具体的某个人为具体创建者,例如:装机小李啊 /// 又装另一台电脑了 /// </summary> public class ConcreteBuilder2 : Builder { Computer computer = new Computer(); public override void BuildPartCPU() { computer.Add("CPU2"); } public override void BuildPartMainBoard() { computer.Add("Main board2"); } public override Computer GetComputer() { return computer; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2016-04-26 System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B) 在 YMS.FingerLogin.Form1.mxGetImage(Int32 iDeviceIndex, Byte[] imageBuf, Int64 nTimeOut, Int32 iFlagLeave)
2016-04-26 js获取url中指定参数的值(含带hash)