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

news2024/12/22 16:29:35

前言

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();
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android studio导入OpenCv并改造成.kts版本

1.下载opencv Android版本 2.解压导入android studio,我这里是先导入低版本的,还是gradle,直接导入module,我这里是4.2.0的版本 我的as版本是Android Studio Electric Eel 2022.1.1 Patch 2,我导入直接就能用 //load OpenCV engine and init OpenCV library //这里放在oncreat…

【easily-openJCL】要尝试下用 显卡 做数据对称加密吗?

easily-openJCL 要尝试下用 显卡 做数据对称加密吗? 开源技术栏 本文演示了一个案例,使用显卡进行数据加密哦,加密方法是 XOR 目录 文章目录 easily-openJCL 要尝试下用 显卡 做数据对称加密吗?目录开始导入项目库加密操作解密…

挖到宝了!统一dlp数据防泄漏解决方案有哪些?千字长文带你熟知这6款!

信息外泄、内部疏忽、离职泄密、黑客入侵、系统漏洞、第三方风险,这些司空见惯的企业数据泄漏问题,无一不牵动着企业的神经,考验着企业的数据安全防线。 今天,我们就来深挖几款统一dlp数据防泄漏解决方案,帮助企业筑起…

wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 wflow-web是一个开源的工作流设计器,它支持可视化拖拽表单组件,动态任意层级结构审批节点,以及复杂流程条件的设置…

VUE3实现好看的世界建筑中国建筑网站源码

文章目录 1.设计来源1.1 网站主界面1.2 登录界面1.3 注册界面1.4 特色建筑展览界面1.5 世界建筑介绍界面1.6 世界建筑介绍 - 详情界面1.7 中国建筑介绍界面1.8 中国建筑介绍 - 详情界面1.9 关于我们界面 2.效果和源码2.1 动态效果2.2 源代码2.3 目录结构 源码下载万套模板&…

Flink新版Source接口源码解析

目录 1. 前言 2. Source解析 2.1 Source类图 2.2 接口和方法说明 2.2.1 Source,> 3. SplitEnumerator解析 3.1 SplitEnumetator类图 3.2 类和方法说明 3.2.1 SplitEnumerator 3.2.2 SimpleVersionedSerializer 4. SourceReader解析 4.1 SourceReader类图 4.2 类…

SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性

介绍 Spring Cloud Gateway 根据请求的路径、HTTP 方法、头部等信息,将请求路由到对应的微服务实例。它支持基于动态路由规则的配置,可以根据请求的 URL、查询参数、请求头等条件,灵活地决定将请求转发到哪个微服务。Spring Cloud Gateway 提…

【老白学 Java】你能想到「封装」说明有点专业

你能想到「封装」说明有点专业 文章来源:《Head First Java》修炼感悟。 上一章,师兄们能否理解对象属性的相互关系? 本章老白想聊聊数据安全的问题,毕竟谁都不想把自己的数据暴露于大庭广众之下。 如果那样的话将毫无隐私可言&a…

chat2db调用ollama实现数据库的操作。

只试了mysql的调用。 其它的我也不用,本来想充钱算了。最后一看单位是美刀。就放弃了这分心。于是折腾了一下。 本地运行chat2db 及chat2db ui https://gitee.com/ooooinfo/Chat2DB clone 后运行起来 chat2db的java端,我现在搞不清这一个项目是有没有…

主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程

一、HIDS简介 主机型入侵检测系统(Host-based Intrusion Detection System 简称:HIDS);HIDS作为主机的监视器和分析器,主要是专注于主机系统内部(监视系统全部或部分的动态的行为以及整个系统的状态)。 HIDS使用传统的C/S架构,只需要在监测端安装agent即可,且使用用户…

qt中ctrl+鼠标左键无法进入

现象:qt中ctrl鼠标左键无法跳转部分函数,例如能跳到textEdit->toPlainText().,但无法跳转到toUtf8();但编译没有问题 排查1:我发现是交叉编译链的问题,使用linux自带就可以进,用ATK-I.MX6U就部分不能进…

Android gradle下载失败后 解决方案

Android 导入gradle一直失败,更新gradle源即可 比如项目里默认的是 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.3.3-bin.zip 用下面这个来替换distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-7.3.3-bin.zip

基于Java Springboot餐厅点餐系统(加入商家版)

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库:MySQL5.7…

开源项目推荐——OpenDroneMap无人机影像数据处理

实景三维作为GIS最火的课题,最近在想做一套自己的三维构建工具,考察了几个开源项目,把自己的搜索过程用csdn记录下来,希望也能帮助到各位同仁。 OpenDroneMap(ODM)是一个开源项目,旨在处理无人…

手动安装Ubuntu系统中的network-manager包(其它包同理)

自己手闲把系统中的network-manager包给删了,导致的结果就是Ubuntu系统彻底没有网络。结果再装network-manager时,没有网络根本装不了,网上的方法都试了也没用,然后就自己源码装,这篇文章就是记录一下怎么手动下载包然…

【C++】从零实现 C++ 自定义 list 容器:双向链表与迭代器深度解析

个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 📘 基础数据结构【C语言】 💻 C语言编程技巧【C】 🚀 进阶C【OJ题解】 📝 题解精讲 目录 📌 1. 引言📌 2. 内容概要📌 3. list 容…

Python Excel XLS或XLSX转PDF详解:七大实用转换设置

目录 使用工具 Python将Excel文件转换为PDF Python将Excel文件转换为带页码的PDF Python将Excel文件转换为特定页面尺寸的PDF Python将Excel文件转换为PDF并将内容适应到一页 Python将Excel文件转换为PDF/A Python将Excel文件中的工作表转换为单独的PDF Python将Excel工…

Centos 7 安装wget

Centos 7 安装wget 最小化安装Centos 7 的话需要上传wget rpm包之后再路径下安装一下。rpm包下载地址(http://mirrors.163.com/centos/7/os/x86_64/Packages/) 1、使用X-ftp 或者WinSCP等可以连接上传的软件都可以首先连接服务器,这里我用的…

LabVIEW 使用 Snippet

在 LabVIEW 中,Snippet(代码片段) 是一个非常有用的功能,它允许你将 一小段可重用的代码 保存为一个 图形化的代码片段,并能够在不同的 VI 中通过拖放来使用。 什么是 Snippet? Snippet 就是 LabVIEW 中的…

A3超级计算机虚拟机,为大型语言模型LLM和AIGC提供强大算力支持

热门大语言模型项目地址:www.suanjiayun.com/mirrorDetails?id66ac7d478099315577961758 近几个月来,我们目睹了大型语言模型(LLMs)和生成式人工智能强势闯入我们的视野,显然,这些模型在训练和运行时需要…