C#设计模式-Builder-生成器-对象创建型模式

cs 复制代码
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; } // GB
        public 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; // 最低16GB
        
        public 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; // 最低8GB
        public 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();
        }
    }
}
cs 复制代码
计算机配置:
- 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
- 外设: 绘图板
相关推荐
码匠许师傅8 小时前
【C++ 面试真题】聊聊 volatile 和 mutable
开发语言·c++·面试
(Charon)8 小时前
【C++】线程安全队列(二):生产者消费者模型与 condition_variable 阻塞等待
c语言·开发语言·c++
liwulin05069 小时前
【PYTHON】使用Selenium + ChromeDriver以及XPATH语法
开发语言·python·selenium
JavaPub-rodert9 小时前
我又把自己的 Go 后台管理系统升级了一遍:文件管理、2GB 上传、私有文件预览、Docker 镜像全安排上了
开发语言·docker·golang·shiyuadmin
动力 continue9 小时前
Python 元类与异常类:类的“制造工厂”与“报错定制师”
开发语言·python·制造
quantdash_cc9 小时前
基于 QuantDash 5 分钟 K 线的网格交易策略参数网格搜索寻优实战
android·开发语言·pandas·量化·quantdash
147API9 小时前
Python批量生成蒸馏数据,并发、重试、幂等和断点续跑
开发语言·jvm·python
青 春 记 忆9 小时前
零基础入门python04:用注册校验理解字典、集合和条件判断
开发语言·vscode·python·python3.11
kels88999 小时前
实战排坑:黄金实时API开发,XAUUSD Tick报文异常处理实践
开发语言·python·websocket·网络协议·信息可视化
阿pin9 小时前
Java随笔-JDK7 HashMap头插法为何能导致死循环?
java·开发语言·hashmap