【C#设计模式(4)——构建者模式(Builder Pattern)】

前言

C#设计模式(4)——构建者模式(Builder Pattern)

运行结果

在这里插入图片描述

代码

public class Computer 
{
    private string part1 = "CPU";
    private string part2 = "主板";
    private string part3 = "内存";
    private string part4 = "显卡";
    private string part5 = "显示器";
    private string part6 = "磁盘";
    private string part7 = "声卡";
    private string part8 = "网卡";

    public void SetPart1(string part) { Console.WriteLine($"{part1}:{part}"); }
    public void SetPart2(string part) { Console.WriteLine($"{part2}:{part}"); }
    public void SetPart3(string part) { Console.WriteLine($"{part3}:{part}"); }
    public void SetPart4(string part) { Console.WriteLine($"{part4}:{part}"); }
    public void SetPart5(string part) { Console.WriteLine($"{part5}:{part}"); }
    public void SetPart6(string part) { Console.WriteLine($"{part6}:{part}"); }
    public void SetPart7(string part) { Console.WriteLine($"{part7}:{part}"); }
    public void SetPart8(string part) { Console.WriteLine($"{part8}:{part}"); }
}
//构建者抽象类
public abstract class Builder
{
    protected Computer computer;
    public Builder () {  this.computer = new Computer(); }
    public abstract void BuildPart1();
    public abstract void BuildPart2();
    public abstract void BuildPart3();
    public abstract void BuildPart4();
    public abstract void BuildPart5();
    public abstract void BuildPart6();
    public abstract void BuildPart7();
    public abstract void BuildPart8();
    public Computer GetComputer() { return computer; }
}
//构建者实体类
public class ComputerBuider : Builder
{
    public override void BuildPart1()
    {
        computer.SetPart1($"AMD Ryzen 7 7745HX with Radeon Graphic 八核");
    }

    public override void BuildPart2()
    {
        computer.SetPart2($"MECHERVO MRID6-23");
    }

    public override void BuildPart3()
    {
        computer.SetPart3($"32GB DDR5 4800MHz( 16GB + 16GB )");
    }

    public override void BuildPart4()
    {
        computer.SetPart4($"NVIDIA GeForce RTX 4060 Laptop GPU (8GB / 清华同方)");
    }

    public override void BuildPart5()
    {
        computer.SetPart5($"TL160ADMP19[TMA2031] (16.3英寸)");
    }

    public override void BuildPart6()
    {
        computer.SetPart6($"KINGSTON OM8PGP41024N-A0 (1024GB)");
    }

    public override void BuildPart7()
    {
        computer.SetPart7($"NVIDIA High Definition Audio");
    }

    public override void BuildPart8()
    {
        computer.SetPart8($"Intel(R) Wi-Fi 6 AX200 160MHz");
    }
}
// 指挥者类
public class Director
{
    private Builder builder;

    public void SetBuilder(Builder builder)
    {
        this.builder = builder;
    }
    public Computer Construct()
    {
        builder.BuildPart1();
        builder.BuildPart2();
        builder.BuildPart3();
        builder.BuildPart4();
        builder.BuildPart5();
        builder.BuildPart6();
        builder.BuildPart7();
        builder.BuildPart8();
        return builder.GetComputer();
    }
}

/*
 * 构建者模式:Builder Pattern
 */
internal class Program
{
    static void Main(string[] args)
    {

        Director director = new Director();
        Builder builder = new ComputerBuider();
        director.SetBuilder(builder);

        Computer computer = director.Construct();
        Console.ReadLine();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/913980.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试第二篇软件测试技术

第五章单元测试和集成测试的技术 单元静态测试主要由开发人员完成。 标准:规定什么能做,什么不能做。 规范:建议你要怎么做。 5.1.2 代码评审 代码评审是一种发现代码缺陷的另一种测试方法。 代码审查的最佳实践: 创建代码审…

【Android、IOS、Flutter、鸿蒙、ReactNative 】文本点击事件

Android Studio 版本 Android Java TextView 实现 点击事件 参考 import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import android.widget.Toast;public c…

二叉树(C 语言)

目录 一、树1. 树的概念2. 树的表示方法3. 树在实际当中的应用 二、二叉树1. 二叉树的定义2. 现实中的二叉树3. 特殊的二叉树4. 二叉树的性质5. 二叉树的存储结构 三、堆 —— 完全二叉树的顺序存储1. 堆的概念2. 堆的性质3. 堆的设计思路4. 堆的实现代码 四、堆排序1. 堆排序的…

游戏引擎学习第五天

这节貌似没讲什么 视频参考:https://www.bilibili.com/video/BV1Gmm2Y5EwE/ uint8 *A somewhere in memory; uint8 *B somewhere in memory;//BEFORE WE GOT TO HERE int Y *B; // whatever was actually there before the 5 *A 5; int X *B; // 5 //Obviously! Y and …

大路灯护眼灯十大品牌哪个牌子好?儿童大路灯护眼灯品牌排行榜

大路灯护眼灯十大品牌哪个牌子好?长时间在不良光线下用眼很容易引起视觉疲劳,最终影响视力健康,这个时候大路灯护眼灯以良好的性能成为了很不错的照明产品。不过如今行业热度很高,网红跨界品牌大路灯护眼灯出于成本压缩&#xff0…

1.2 图像处理基本操作

在本实战中,我们将学习如何使用OpenCV进行基本的图像处理操作。首先,我们将通过cv2.imread()函数读取图像,并使用cv2.imshow()在窗口中显示它。接着,我们将探索如何通过cv2.imwrite()保存图像,并设置不同的参数以控制图…

K8S如何基于Istio实现全链路HTTPS

K8S如何基于Istio实现全链路HTTPS Istio 简介Istio 是什么?为什么选择 Istio?Istio 的核心概念Service Mesh(服务网格)Data Plane(数据平面)Sidecar Mode(边车模式)Ambient Mode(环境模式)Control Plane(控制平面)Istio 的架构与组件Envoy ProxyIstiod其他组件Istio 的流量管…

手动搭建 Ghost 博客

操作场景 Ghost 是使用 Node.js 语言编写的开源博客平台,您可使用 Ghost 快速搭建博客,简化在线出版过程。本文档介绍如何在腾讯云云服务器(CVM)上手动搭建 Ghost 个人网站。 进行 Ghost 网站搭建,您需要熟悉 Linux …

MySQL之索引(3)(索引基本语法、SQL执行计划、常见索引失效原因与解决方法)

目录 一、索引基本语法。 (1)创建索引。 (2)查看索引。 (3)删除索引。 (4)给多列添加组合索引。 1、何时添加索引?? 2、组合索引。 二、SQL执行计划。 &#…

前端中的 File 和 Blob两个对象到底有什么不同

JavaScript 在处理文件、二进制数据和数据转换时,提供了一系列的 API 和对象,比如 File、Blob、FileReader、ArrayBuffer、Base64、Object URL 和 DataURL。每个概念在不同场景中都有重要作用。下面的内容我们将会详细学习每个概念及其在实际应用中的用法…

一步一步从asp.net core mvc中访问asp.net core WebApi

"从asp.net core mvc中访问asp.net core WebApi"看到这个标题是不是觉得很绕口啊,但的确就是要讲一讲这样的访问。前面我们介绍了微信小程序访问asp.net core webapi(感兴趣的童鞋可以看看前面的博文有关WEBAPI的搭建),这里我们重点不关心如何…

【Linux系列】VNC安装ssh后,ssh无法登录

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

温度虽寒,其道犹变:OpenAI接口之温度参数设置为0,为何每次回复仍有不确定性?

问题描述 调用openai API,使用templature 0,每次返回的内容仍有一些不同 >>> client OpenAI( ... api_keyapi_key, ... base_urlapi_base) #第一次尝试 >>> response client.chat.completions.create(mo…

【软件测试】需求的概念和常见模型(瀑布、螺旋、增量、迭代)

1. 什么是需求 在企业中,经常会听到:用户需求和软件需求 用户需求:没用经过合理的评估,通常就是一句话(开发一个五彩斑斓的黑)软件需求:开发人员和测试人员执行工作的依据 1.2 软件需求 在工…

食品配送管理系统(源码+文档+部署+讲解)

食品配送管理系统是成品商业化项目,系统可基于源码二开。 系统概述 餐饮食品配送,包含配送人APP、下单APP、管理端等,实现订餐、配餐,用于食品店、中央厨房等订餐、团餐业务 本项目名称为食品配送系统,是针对食品配…

./bin/mindieservice_daemon启动成功

接MindIE大模型测试及报错Fatal Python error: PyThreadState_Get: the function must be called with the GIL held,-CSDN博客经过调整如下红色部分参数,昇腾310P3跑起来了7b模型: rootdev-8242526b-01f2-4a54-b89d-f6d9c57c692d-qjhpf:/home/apulis-de…

我谈维纳(Wiener)复原滤波器

Rafael Gonzalez的《数字图像处理》中,图像复原这章内容几乎全错。上篇谈了图像去噪,这篇谈图像复原。 图像复原也称为盲解卷积,不处理点扩散函数(光学传递函数)的都不是图像复原。几何校正不属于图像复原&#xff0c…

精选 Top10 开源调度工具,解锁高效工作负裁自动化

在大数据和现代 IT 环境中,任务调度与工作负载自动化(WLA)工具是优化资源利用、提升生产效率的核心驱动力。随着企业对数据分析、实时处理和多地域任务调度需求的增加,这些工具成为关键技术。 本文将介绍当前技术发展背景下的Top …

高效视觉方案:AR1335与i.MX8MP的完美结合

方案采用NXP i.MX8MP处理器和onsemi AR1335图像传感器,i.MX8MP集成四核Cortex-A53、NPU及双ISP技术。AR1335是一颗分辨率为13M的CMOS传感器。它使用了先进的BSI技术,提供了超高的分辨率和出色的低光性能,非常适合于需要高质量图像的应用。此外…

Ubuntu+ROS 机械臂拾取和放置

官方链接:https://github.com/skumra/baxter-pnp 1.下载并安装 SDK 依赖项 sudo apt-get install python-wstool python-rosdep 2.创建新的 catkin 工作区 mkdir -p ~/ros_ws/src cd ~/ros_ws/src 3.使用 wstool 下载 rosinstall 文件并将其复制到 Catkin 工作区…