首页 > 编程语言 >C#设计模式13——建造者模式的写法

C#设计模式13——建造者模式的写法

时间:2023-05-09 21:44:37浏览次数:33  
标签:13 C# 创建 void 建造 computer override 设计模式 public

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
``` 

可以看出,我们成功地创建了不同配置的电脑。

标签:13,C#,创建,void,建造,computer,override,设计模式,public
From: https://www.cnblogs.com/for-easy-fast/p/17386391.html

相关文章

  • C++异常和错误处理机制:如何使您的程序更加稳定和可靠
    在C++编程中,异常处理和错误处理机制是非常重要的。它们可以帮助程序员有效地处理运行时错误和异常情况。本文将介绍C++中的异常处理和错误处理机制。什么是异常处理?异常处理是指在程序执行过程中发生异常或错误时,程序能够捕获并处理这些异常或错误的机制。例如,当程序试图访问......
  • 打卡 c语言趣味编程 打鱼还是晒网
    中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的以后的某一天中是打鱼还是晒网。设计思路:1、定义一个函数,该函数接收两个参数:一个是起始日期,另一个是未来的某一天。2、计算起始日期和未来的某一天之间相隔的天数......
  • protoc命令工具使用
    protoc参数基本含义--go_out用于指定protoc的工作方式和go代码生成的位置参数(用,分开):plugins:生成go代码所用插件paths:go代码生成的位置:import:$按照生成的go代码的包的全路径来创建目录层级例如:在demo.proto中定义了optiongo_package="project/demo",那么就会......
  • C#设计模式11——代理模式的写法
    1.什么是代理模式?代理模式是一种结构型设计模式,它允许通过代理对象来控制对真实对象的访问,以提供额外的功能或控制访问权限。2.代理模式的作用是什么?代理模式可以为对象提供保护代理、远程代理、虚拟代理和智能引用四种不同的实现方式,以适应不同的应用场景。代理模式还可以用......
  • Docker CLI docker compose rm常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • CF1825D1 题解
    一、题目描述:给定$n$和$k$,表示有$n$个点,其中有$k$个点是关键点,这$k$个点随机分布。给出$n$个点的连接方式,保证构成一棵树,求有期望多少个点使得这个点到$k$个关键点的距离之和最小,答案对$1e9+7$取模。数据范围:$1\leqn\leq2e5,1\leqk\leqmin(n,3)......
  • C++异常和错误处理机制:如何使您的程序更加稳定和可靠
    在C++编程中,异常处理和错误处理机制是非常重要的。它们可以帮助程序员有效地处理运行时错误和异常情况。本文将介绍C++中的异常处理和错误处理机制。什么是异常处理?异常处理是指在程序执行过程中发生异常或错误时,程序能够捕获并处理这些异常或错误的机制。例如,当程序试图访问一......
  • Personalized Top-N Sequential Recommendation via Convolutional Sequence Embeddin
    目录概符号说明Caser代码TangJ.andWangK.Personalizedtop-nsequentialrecommendationviaconvolutionalsequenceembedding.WSDM,2018.概序列推荐的经典之作,将卷积用在序列推荐之上.符号说明\(\mathcal{U}=\{u_1,u_2,\cdots,u_{|\mathcal{U}|}\}\),us......
  • C#设计模式10——享元模式的写法
    1.什么是享元模式?享元模式是一种结构型设计模式,目的是通过共享对象来尽量减少内存使用和对象数量。它通过将对象分为可共享的和不可共享的来实现这一目的。2.为什么要使用享元模式?使用享元模式可以大大减少系统中对象的数量,从而减少了内存的使用。在对象数量较大,且需要相同状......
  • React笔记-组件(一)
    React学习笔记-组件(一未完成)特点声明式组件化跨平台React脚手架a.全局安装react脚手架create-react-appnpminstallcreate-react-app-g&npxcreate-react-appmy-appb.使用create-react-app创建react应用,如果直接使用npx则无需执行这一步,直接执行第3步c......