C#設計模式-Builder-生成器-對象創建型模式

using System;
using System.Collections.Generic;namespace A4_Builder_生成器_對象創建型模式
{// 產品類:最終要構建的復雜對象public class Computer{public string CPU { get; set; }public string GPU { get; set; }public int RAM { get; set; } // GBpublic List<string> Storage { get; } = new List<string>();public List<string> Peripherals { get; } = new List<string>();public void DisplayConfiguration(){Console.WriteLine("計算機配置:");Console.WriteLine($"- CPU: {CPU}");Console.WriteLine($"- GPU: {GPU ?? "集成顯卡"}");Console.WriteLine($"- RAM: {RAM}GB");Console.WriteLine($"- 存儲設備: {string.Join(", ", Storage)}");Console.WriteLine($"- 外設: {(Peripherals.Count > 0 ? string.Join(", ", Peripherals) : "無")}");Console.WriteLine("\n");}}// 抽象生成器接口public interface IComputerBuilder{void SetCPU(string model);void SetGPU(string model);void SetRAM(int size);void AddStorage(string device);void AddPeripheral(string device);Computer Build();}// 具體生成器:游戲電腦配置public class GamingComputerBuilder : IComputerBuilder{private Computer _computer = new Computer();public void SetCPU(string model) => _computer.CPU = $"{model} (超頻版)";public void SetGPU(string model) => _computer.GPU = $"{model} RTX";public void SetRAM(int size) => _computer.RAM = size >= 16 ? size : 16; // 最低16GBpublic void AddStorage(string device){if (!device.Contains("SSD"))device += " SSD";_computer.Storage.Add(device);}public void AddPeripheral(string device){if (device == "鼠標") device = "游戲鼠標";if (device == "鍵盤") device = "機械鍵盤";_computer.Peripherals.Add(device);}public Computer Build() => _computer;}// 具體生成器:辦公電腦配置public class OfficeComputerBuilder : IComputerBuilder{private Computer _computer = new Computer();public void SetCPU(string model) => _computer.CPU = $"{model} (節能版)";public void SetGPU(string model) => _computer.GPU = "集成顯卡";public void SetRAM(int size) => _computer.RAM = size >= 8 ? size : 8; // 最低8GBpublic void AddStorage(string device) => _computer.Storage.Add(device);public void AddPeripheral(string device) => _computer.Peripherals.Add(device);public Computer Build() => _computer;}// 指揮者:控制構建流程public class ComputerDirector{public Computer BuildHighEndGamingPC(IComputerBuilder builder){builder.SetCPU("Intel i9-13900K");builder.SetGPU("NVIDIA RTX 4090");builder.SetRAM(32);builder.AddStorage("1TB NVMe SSD");builder.AddStorage("2TB SATA SSD");builder.AddPeripheral("鼠標");builder.AddPeripheral("鍵盤");builder.AddPeripheral("電競顯示器");return builder.Build();}public Computer BuildStandardOfficePC(IComputerBuilder builder){builder.SetCPU("Intel i5-12400");builder.SetRAM(16);builder.AddStorage("512GB SSD");builder.AddPeripheral("鼠標");builder.AddPeripheral("鍵盤");return builder.Build();}}// 客戶端代碼class Program{static void Main(string[] args){var director = new ComputerDirector();// 構建游戲電腦var gamingBuilder = new GamingComputerBuilder();var gamingPC = director.BuildHighEndGamingPC(gamingBuilder);gamingPC.DisplayConfiguration();// 構建辦公電腦var officeBuilder = new OfficeComputerBuilder();var officePC = director.BuildStandardOfficePC(officeBuilder);officePC.DisplayConfiguration();// 自定義構建var customBuilder = new OfficeComputerBuilder();customBuilder.SetCPU("AMD Ryzen 7 5800X");customBuilder.SetGPU("AMD Radeon RX 6700 XT");customBuilder.SetRAM(64);customBuilder.AddStorage("2TB NVMe SSD");customBuilder.AddPeripheral("繪圖板");var customPC = customBuilder.Build();customPC.DisplayConfiguration();}}
}

計算機配置:
- CPU: Intel i9-13900K (超頻版)
- GPU: NVIDIA RTX 4090 RTX
- RAM: 32GB
- 存儲設備: 1TB NVMe SSD SSD, 2TB SATA SSD SSD
- 外設: 游戲鼠標, 機械鍵盤, 電競顯示器計算機配置:
- CPU: Intel i5-12400 (節能版)
- GPU: 集成顯卡
- RAM: 16GB
- 存儲設備: 512GB SSD
- 外設: 鼠標, 鍵盤計算機配置:
- CPU: AMD Ryzen 7 5800X (節能版)
- GPU: AMD Radeon RX 6700 XT
- RAM: 64GB
- 存儲設備: 2TB NVMe SSD
- 外設: 繪圖板

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86378.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86378.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86378.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言堆內存管理詳解:malloc和free的使用指南

在C語言程序設計中&#xff0c;內存管理是一個重要的話題。本文將詳細介紹堆內存的分配和釋放&#xff0c;重點講解malloc和free函數的使用方法&#xff0c;并通過實例說明相關注意事項。 一、堆內存與棧內存的區別 在C語言中&#xff0c;內存主要分為堆內存和棧內存&#xf…

探索 Oracle Database 23ai 中的 SQL 功能

探索 Oracle Database 23ai 中的 SQL 功能 介紹目標前提條件 功能 1&#xff1a;使用 FROM 子句功能 2&#xff1a;使用 BOOLEAN 數據類型功能 3&#xff1a;使用 IF NOT EXISTS DDL 子句功能 4&#xff1a;使用 INSERT 插入多行功能 5&#xff1a;使用新的 VALUE 構造函數功能…

SQL(6)

! 會排除null數據 select name from Customer where referee_id ! 2 or referee_id is null; 交叉聯結 交叉連接&#xff08;CROSS JOIN&#xff09;-CSDN博客 197. 上升的溫度 select a.id from weather as a cross join weather as b on datediff(a.recordDate ,b.recordD…

【Java面試題】cookie、session、jwt/token的異同

以下是對Cookie、Session、Token與JWT的異同的完善分析&#xff0c;結合技術原理、安全性和應用場景進行系統性對比&#xff1a; &#x1f50d; 一、核心概念與工作流程 機制定義工作流程核心特點Cookie客戶端存儲的小型文本數據1. 服務器通過Set-Cookie響應頭下發數據2. 瀏覽…

數字經濟時代科技創業的巨大潛力

2025年3月&#xff0c;42歲的字節跳動創始人張一鳴以655億美元身家成為中國新首富。這位"80后"企業家白手起家的故事&#xff0c;展現了數字經濟時代科技創業的巨大潛力。本文將帶您了解張一鳴的成功秘訣&#xff0c;分析網絡安全行業的最新趨勢&#xff0c;并為計算…

深入剖析Nginx架構及其不同使用場景下的配置

一、Nginx 整體架構概覽 1. Nginx簡介 Nginx 是采用 C 語言 編寫的高性能 Web 服務器、反向代理服務器及郵件代理服務器&#xff0c;特點是&#xff1a;高并發、高可用、低內存占用、模塊化設計。 架構核心理念&#xff1a; Master-Worker 多進程模型 事件驅動&#xff08;…

單元測試詳解

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 對于軟件測試&#xff0c;我們先按照開發階段來進行劃分&#xff0c;將軟件測試分為單元測試、集成測試、系統測試、驗收測試&#xff0c;下面我們來聊聊單元測試。…

四款好用的Windows虛擬打印機,文檔轉PDF

1&#xff0c;Microsoft Print To PDF 2&#xff0c;Foxit Reader PDF Printer 3&#xff0c;Adobe PDF 4&#xff0c;clawPDF 參考文檔&#xff1a; https://mp.weixin.qq.com/s/_mt4J2RwhqQE36DRAvc-Rg

《map和set的使用介紹》

引言&#xff1a; 上次我們學習了第一個高階數據結構—二叉搜索樹&#xff0c;趁熱打鐵&#xff0c;今天我們就再來學習兩個數據結構—map和set。 一&#xff1a;序列式容器和關聯式容器 前面我們已經接觸過STL中的部分容器如&#xff1a;string、vector、list、deque、arra…

PostgreSQL(二十六)分區表管理

目錄 一、分區表特點 1、概念&#xff1a; 2、好處&#xff1a; 3、特點&#xff1a; 二、范圍分區介紹 1、簡介 2、范圍分區實驗&#xff1a; 三、list分區介紹 1、簡介 2、list分區表實驗 四、hash分區介紹 1、簡介 2、hash分區表實驗 五、混合分區介紹 1、簡…

概率論中的生日問題,違背直覺?如何計算? 以及從人性金融的角度分析如何違背直覺的?

一、生日問題的概率計算&#xff1a;為何23人就有50%概率撞生日&#xff1f; 1. 問題背景與直覺矛盾 生日問題指&#xff1a;在n個人中&#xff0c;至少有兩人生日相同的概率超過50%時&#xff0c;n的最小值是多少&#xff1f; 直覺判斷&#xff1a;因一年有365天&#xff0c…

Qt for WebAssembly官方說明文檔

鏈接 Qt for WebAssembly | Qt 5.15

前端自主實現將vue頁面轉為pdf文件下載

1.vue 轉 PDF 在 Vue 項目中將 HTML 頁面轉換為 PDF 文件是一個常見需求&#xff0c;特別是在需要生成報告或打印頁面時。本文將介紹如何使用 html2canvas 和 jspdf 庫實現這一功能。 2.安裝依賴 首先&#xff0c;我們需要安裝兩個庫&#xff1a;html2canvas 和 jspdf 。可以…

TCP 堅持定時器詳解:原理、配置與最佳實踐?

一、TCP 堅持定時器基礎原理 1.1 堅持定時器的設計目的 TCP 堅持定時器 (TCP Persist Timer) 是 TCP 協議中用于處理接收窗口為零情況的重要機制&#xff0c;其核心設計目的是防止 TCP 連接在窗口更新 ACK 丟失時陷入死鎖狀態。當 TCP 連接的接收方通告一個窗口大小為 0 的 A…

大廠測開實習和小廠開發實習怎么選

先說選擇&#xff0c;這個可以百分百確定選大廠&#xff0c;title很重要。 要想弄清楚那個選擇對自己最有利&#xff0c;可以思考下實習的意義是什么&#xff1f; 實習無非就是給簡歷加分&#xff0c;拿到好offer&#xff0c;高薪offer。 那這就需要思考&#xff0c;簡歷怎么讓…

Unity中的urp和普通的標準渲染管線區別在哪

Unity中的URP&#xff08;Universal Render Pipeline&#xff09;與內置標準渲染管線&#xff08;Built-in Render Pipeline&#xff09;的區別深刻反映了Unity渲染技術的演進方向。以下從架構、性能、功能、工作流等多個維度進行深度分析&#xff1a; 1. 底層架構與設計哲學 標…

Vscode 編寫Markdown支持 plantuml書寫

1&#xff1a; 下載PlantUml 插件&#xff1a; 2&#xff1a; 安裝java https://www.oracle.com/java/technologies/downloads/ 3&#xff1a; 安裝Graphviz https://graphviz.org/download/ 4&#xff1a; 下載plantuml.jar https://plantuml.com/zh/download 5&…

設計模式(C++/Qt)-工廠模式

在軟件開發中&#xff0c;對象創建是基礎但關鍵的任務——工廠模式提供了一種優雅的解決方案&#xff0c;讓您的代碼擺脫硬編碼的依賴關系 一、為什么需要工廠模式&#xff1f; 在C/Qt開發中&#xff0c;我們經常面臨這樣的困境&#xff1a; 對象創建邏輯分散在代碼各處新增…

Pydantic 模型

本文將詳細介紹 Pydantic 模型 和 BaseModel 的核心概念&#xff0c;并通過實際代碼示例如何從零開始編寫自己的 Pydantic 模型。 1. Pydantic 是什么&#xff1f; Pydantic 是一個 Python 庫&#xff0c;主要用于&#xff1a; 數據驗證&#xff1a;確保輸入數據符合預期的類…

【Unity智能模型系列】MediaPipeUnityPlugin 實現人臉數據獲取

目錄 一、MediaPipeUnity 簡介 二、MediaPipeUnity 的核心組成 1. Graph 構建系統 2. 解決方案類(Solution) 3. 解釋注釋Annotation 系統 三、MediaPipeUnity 的典型使用流程 四、典型示例解析 1、案例 Face Detection圖形人臉檢測 2、案例 Face Detection圖形人臉檢…