首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式實戰:Builder 建造者模式完整解析(二)

     編輯:關於C語言

完整實作代碼:電腦組裝案例


using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace BuilderExample
{
    class Program
    {
        static void Main(string[] args)
        {
            ComputerFactory factory = new ComputerFactory();
            ComputerBuilder office = new OfficeComputerBuilder();
            factory.BuildComputer(office);
            office.Computer.ShowSystemInfo();

            ComputerBuilder game = new GameComputerBuilder();
            factory.BuildComputer(game);
            game.Computer.ShowSystemInfo();
        }
    }

    class ComputerFactory // Director
    {
        public void BuildComputer(ComputerBuilder cb)
        {
            Console.WriteLine("\n>>>>>>>>>>>>>>>>>> Start Building " + cb.Name);
            cb.SetupMainboard();
            cb.SetupCpu();
            cb.SetupMemory();
            cb.SetupHarddisk();
            cb.SetupVideocard();
            Console.WriteLine(">>>>>>>>>>>>>>>>>> Build " + cb.Name + " Completed\n");
        }
    }

    abstract class ComputerBuilder // Abstract Builder
    {
        protected string name;
        public string Name { get { return name; } set { name = value; } }
        protected Computer computer;
        public Computer Computer { get { return computer; } set { computer = value; } }

        public ComputerBuilder() { computer = new Computer(); }

        public abstract void SetupMainboard();
        public abstract void SetupCpu();
        public abstract void SetupMemory();
        public abstract void SetupHarddisk();
        public abstract void SetupVideocard();
    }

    class OfficeComputerBuilder : ComputerBuilder // Concrete Builder
    {
        public OfficeComputerBuilder() { name = "OfficeComputer"; }
        public override void SetupMainboard() => computer.Mainboard = "Abit 升技 LG-95C 主板 (Intel 945GC/LGA 775/1066MHz)";
        public override void SetupCpu() => computer.Cpu = "Intel Celeron D 336 (2.8GHz/LGA 775/256K/533MHz)";
        public override void SetupMemory() => computer.Memory = "Patriot DDR2 667 512MB";
        public override void SetupHarddisk() => computer.Harddisk = "Hitachi SATAII 80G 7200轉 8M";
        public override void SetupVideocard() => computer.Videocard = "主板集成";
    }

    class GameComputerBuilder : ComputerBuilder
    {
        public GameComputerBuilder() { name = "GameComputer"; }
        public override void SetupMainboard() => computer.Mainboard = "GIGABYTE GA-965P-DS3 3.3 主板 (Intel P965)";
        public override void SetupCpu() => computer.Cpu = "Intel Core 2 Duo E4400 (2.0GHz/LGA 775/2M/800MHz)";
        public override void SetupMemory() => computer.Memory = "G.SKILL F2-6400CL5D-2GBNQ DDR2 800 1G*2";
        public override void SetupHarddisk() => computer.Harddisk = "Hitachi SATAII 250G 7200轉 8M";
        public override void SetupVideocard() => computer.Videocard = "七彩虹 GT-GD3 UP 烈焰戰神 H10 (GeForce 8600GT/256M/DDR3/HDMI)";
    }

    class Computer // Product
    {
        private string _videocard, _cpu, _mainboard, _memory, _harddisk;
        public string Videocard { get { return _videocard; } set { _videocard = value; } }
        public string Cpu { get { return _cpu; } set { _cpu = value; } }
        public string Mainboard { get { return _mainboard; } set { _mainboard = value; } }
        public string Memory { get { return _memory; } set { _memory = value; } }
        public string Harddisk { get { return _harddisk; } set { _harddisk = value; } }

        public void ShowSystemInfo()
        {
            Console.WriteLine("==================SystemInfo==================");
            Console.WriteLine("CPU: " + _cpu);
            Console.WriteLine("MainBoard: " + _mainboard);
            Console.WriteLine("Memory: " + _memory);
            Console.WriteLine("VideoCard: " + _videocard);
            Console.WriteLine("HardDisk: " + _harddisk);
        }
    }
}

角色對應與流程

角色類別職責
DirectorComputerFactory定義組裝順序:主板 → CPU → 記憶體 → 硬碟 → 顯卡
Abstract BuilderComputerBuilder宣告建構步驟介面,持有產品實例
Concrete BuilderOfficeComputerBuilder, GameComputerBuilder實作具體零件選擇
ProductComputer最終產出物件

模式優勢體現

  • 相同組裝流程(Director)產出截然不同配置(Builder)
  • 新增機型(如 Workstation)只需新增 Builder,零修改 Director
  • 建構細節封裝在 Builder,Client 僅需選擇 Builder 類型
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved