C#设计模式13——建造者模式的写法
1. 什么是建造者模式?
建造者模式是一种创建型设计模式,它通过将一个复杂的对象分解为多个简单的对象并按照一定的顺序进行组装而创建出一个复杂的对象。这样可以使得构造过程更加灵活,同时也可以隐藏创建过程的复杂性。
2. 建造者模式的使用场景?
建造者模式适用于以下场景:
(1) 当需要创建的对象非常复杂或者包含很多组成部分时;
(2) 当需要创建的对象的构建顺序和方式很重要,不同的构建顺序和方式会产生不同的对象;
(3) 当需要创建的对象需要根据不同的参数来创建时;
(4) 当需要避免创建过程中出现重叠构造方法时。
3. 建造者模式有哪些角色?
建造者模式通常包含以下几个角色:
(1) 抽象建造者(Builder):定义一个抽象接口,用来规范产品的组建;
(2) 具体建造者(ConcreteBuilder):实现抽象建造者接口,用来构建和装配各个部件;
(3) 产品(Product):具体的产品,由多个部件组成;
(4) 指挥者(Director):负责安排具体建造者的构建顺序,并指导具体建造者构建和装配部件。
4. 建造者模式的优点是什么?
建造者模式的优点如下:
(1) 可以隐藏对象的创建过程,使得构造过程更加灵活,同时也可以避免创建对象时过度复杂和困难。
(2) 可以使用不同的构造方法来创建不同的产品,可以满足不同的需求。
(3) 可以将对象的组装过程逐步实现,使得更好的控制对象的创建过程。
(4) 使得客户端代码与具体创建过程分离,使得系统更加易于维护和升级。
5. 建造者模式的缺点是什么?
建造者模式的缺点如下:
(1) 由于需要创建多个类,因此增加了系统的复杂度。
(2) 创建过程的灵活性和控制性也可能会导致系统的过度设计和变得难以维护。
(3) 相对于其他创建型模式,建造者模式的代码量较大,因此可能增加开发成本。
下面是一个使用建造者模式创建电脑的 C# 代码示例:
//产品类-电脑
public class Computer
{
public string CPU { get; set; }
public string GPU { get; set; }
public string Memory { get; set; }
public string HardDisk { get; set; }
public void Display()
{
Console.WriteLine($"CPU: {CPU}\nGPU: {GPU}\nMemory: {Memory}\nHardDisk: {HardDisk}\n");
}
}
//抽象建造器类
public abstract class ComputerBuilder
{
protected Computer computer = new Computer();
public abstract void BuildCPU();
public abstract void BuildGPU();
public abstract void BuildMemory();
public abstract void BuildHardDisk();
public Computer GetResult()
{
return computer;
}
}
//建造器类1-游戏电脑
public class GamingComputerBuilder : ComputerBuilder
{
public override void BuildCPU()
{
computer.CPU = "Intel i7-10700K";
}
public override void BuildGPU()
{
computer.GPU = "NVIDIA RTX 3080";
}
public override void BuildMemory()
{
computer.Memory = "32GB DDR4";
}
public override void BuildHardDisk()
{
computer.HardDisk = "2TB SSD + 4TB HDD";
}
}
//建造器类2-办公电脑
public class OfficeComputerBuilder : ComputerBuilder
{
public override void BuildCPU()
{
computer.CPU = "Intel i5-10400";
}
public override void BuildGPU()
{
computer.GPU = "Intel UHD Graphics 630";
}
public override void BuildMemory()
{
computer.Memory = "16GB DDR4";
}
public override void BuildHardDisk()
{
computer.HardDisk = "512GB NVMe SSD";
}
}
//指挥官类
public class Director
{
public void ConstructComputer(ComputerBuilder builder)
{
builder.BuildCPU();
builder.BuildGPU();
builder.BuildMemory();
builder.BuildHardDisk();
}
}
//客户端调用
class Client
{
static void Main(string[] args)
{
Director director = new Director();
ComputerBuilder gamingBuilder = new GamingComputerBuilder();
ComputerBuilder officeBuilder = new OfficeComputerBuilder();
director.ConstructComputer(gamingBuilder);
Computer gamingComputer = gamingBuilder.GetResult();
Console.WriteLine("游戏电脑配置如下:");
gamingComputer.Display();
director.ConstructComputer(officeBuilder);
Computer officeComputer = officeBuilder.GetResult();
Console.WriteLine("办公电脑配置如下:");
officeComputer.Display();
Console.ReadLine();
}
}
在这个示例中,我们定义了一个产品类——电脑类,具有 CPU、GPU、内存、硬盘等属性。
同时我们定义了一个抽象建造者类——ComputerBuilder,其中包含了构建电脑的方法。
然后我们定义了两个具体建造者类——GamingComputerBuilder和OfficeComputerBuilder,用来构建不同类型的电脑。
最后,我们定义了一个指挥官类——Director,用来负责调用建造者类的构建方法,按照一定的顺序来构建电脑。在主函数中,我们实现了客户端代码,实例化了不同的建造者类和指挥官类,然后调用ConstructComputer方法来构建电脑。
输出结果如下:
```
游戏电脑配置如下:
CPU: Intel i7-10700K
GPU: NVIDIA RTX 3080
Memory: 32GB DDR4
HardDisk: 2TB SSD + 4TB HDD
办公电脑配置如下:
CPU: Intel i5-10400
GPU: Intel UHD Graphics 630
Memory: 16GB DDR4
HardDisk: 512GB NVMe SSD
```
可以看出,我们成功地创建了不同配置的电脑。
C#设计模式13——建造者模式的写法的更多相关文章
- 从ES6重新认识JavaScript设计模式(三): 建造者模式
1 什么是建造者模式? 建造者模式(Builder)是将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示. 建造者模式的特点是分步构建一个复杂的对象,可以用不同组合或顺序建造出不 ...
- Java设计模式之建造者模式(Builder)
前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ...
- C#设计模式(5)——建造者模式(Builder Pattern)
一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象, ...
- 【GOF23设计模式】建造者模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...
- C++设计模式之建造者模式(三)
4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外.还能够通过Director类来更加精细地控制产品的创建过程.比如添加一类称之为钩子方法(HookMethod)的特殊方法来控制是 ...
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- C#设计模式之四建造者模式(Builder Pattern)【创建型】
一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一 ...
- Java 设计模式之建造者模式(四)
原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...
- GOF23设计模式之建造者模式
GOF23设计模式之建造者模式 场景: 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样的一个问题需要处理: 装配这些子组件是不是有个步骤问题? 实际开发中,我们所 ...
随机推荐
- React Hooks 钩子特性
人在身处逆境时,适应环境的能力实在惊人.人可以忍受不幸,也可以战胜不幸,因为人有着惊人的潜力,只要立志发挥它,就一定能渡过难关. Hooks 是 React 16.8 的新增特性.它可以让你在不编写 ...
- Django学习(三) 之 模板中标签的使用
写在前面 最近看到稀土掘金在搞2023年终总结征文活动,一直想尝试投稿试试,周末我就花了近一下午时间写完初稿,然后周一.周二完成精读再改稿,感觉OK,昨晚凌晨第一时间在稀土掘金投稿. 结果,又发生了同 ...
- windows端口被占用怎么办?
简单只需要按照一下命令查找到对应的端口kill掉就好了 1.查看本机所有的端口信息 netstat -ano 2.查看本机指定端口信息 netstat -ano | findstr "端口号 ...
- MybatisPlus属性自动填充
阿里巴巴开发规范,对于每一张表都因该有id(主键),createTime(创建时间),updateTime(修改时间)这三个字段 主键ID我们可以使用自增,或者雪花算法 创建时间修改时间我们可以使用数 ...
- 【2016】CloneCD和IsoBuster配合使用以提取VCD中的文件
**笔记记录于:2016-11-24 ** 本文章仅供用于技术研究用途,请勿利用文章内容操作用于违反法律的事情. 起因: 公司老总让我提取下VCD中的文件以备份下,但是把光碟放进DVD光驱中发现只有几 ...
- 数字孪生结合GIS会为智慧农业带来怎样的改变?
数字孪生是一种创新的技术,它通过将现实世界的物理实体与数字模型相结合,实现了实时.动态的仿真和预测.而地理信息系统(GIS)则是一种用于收集.管理.分析和展示地理数据的工具.当这两种技术相互融合时,将 ...
- Json Schema简介和Json Schema的.net实现库 LateApexEarlySpeed.Json.Schema
什么是Json Schema ? Json Schema是一种声明式语言,它可以用来标识Json的结构,数据类型和数据的具体限制,它提供了描述期望Json结构的标准化方法. 利用Json Schema ...
- Python——第五章:处理异常try、except、else、finally
处理异常try 和 except 在 Python 中,try 和 except 语句用于处理异常(错误).通过使用这两个关键字,你可以编写代码来捕获和处理可能发生的异常,以保持程序的稳定性. try ...
- 前端系列:正则表达式RegExp详解
目录 正则创建 匹配方法 元字符 字符集合 边界 分组 数量词汇 匹配模式 RegExp 方法特性 正则创建 字面量创建 const str = 'asdf123sds3234' const rege ...
- VSCode 终端选择文本自动复制
Ctrl + , 打开设置 搜索 copyOnSelection,勾选即可 对应的 settings.json 如下 "terminal.integrated.copyOnSelection ...