ホームページ >バックエンド開発 >C#.Net チュートリアル >コンピューターの構成の問題を解決するための C# のビルダー ジェネレーター モードの詳細な説明
この記事では、妻と一緒にコンピューターを構成する際の問題を解決するために、主に C# 設計パターンのビルダー パターンを紹介します。ビルダー パターンの概念と機能を簡単に紹介し、それを具体的な例と組み合わせて C# の手順と手順を分析します。関連する操作スキルについては、必要な友人が参照できます
この記事では、妻とのコンピューターの構成の問題を解決するための C# 設計パターンのビルダー ジェネレーター モードの例について説明します。 。参考のために皆さんと共有してください。詳細は次のとおりです:
1. 理論的定義
ジェネレーター モードは、ビルダー モードとも呼ばれ、複雑なオブジェクトを段階的に作成できます。
2. アプリケーション例
要件の説明: 給料の話ですが、妻のコンピューターを設定するために江頂白納匯に行く予定です。
OK、BRT に乗って出発しましょう。
私がポストの一番上に到達したとき、美しい女性が笑顔で私に来ました:先生、どのブランドが好きですか?
みんなが話していて、おもてなしを断りにくいので、見てみましょう。
3. 特定のコーディング
1.CPU
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// CPU /// </summary> public class CPU { /// <summary> /// CPU品牌 /// </summary> public string Brand { get; set; } /// <summary> /// CPU系列名 /// </summary> public string SerialsName { get; set; } //其他属性........... } }
2.マザーボード
MotherBoard
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// 主板 /// </summary> public class MotherBoard { /// <summary> /// 主板品牌 /// </summary> public string Brand { get; set; } /// <summary> /// 主板系列名 /// </summary> public string SerialsName { get; set; } //其他属性........... } }
3.メモリ
メモリ
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// Memory /// </summary> public class Memory { /// <summary> /// Memory品牌 /// </summary> public string Brand { get; set; } /// <summary> /// Memory系列名 /// </summary> public string SerialsName { get; set; } //其他属性........... } }
4 .ハードディスク
ハードディスク
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// HardDisk /// </summary> public class HardDisk { /// <summary> /// HardDisk品牌 /// </summary> public string Brand { get; set; } /// <summary> /// HardDisk系列名 /// </summary> public string SerialsName { get; set; } //其他属性........... } }
5.グラフィックカード
グラフィックカード
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> ///显卡 GraphicCard /// </summary> public class GraphicCard { /// <summary> /// 显卡GraphicCard品牌 /// </summary> public string Brand { get; set; } /// <summary> /// 显卡GraphicCard系列名 /// </summary> public string SerialsName { get; set; } //其他属性........... } }
6.ディスプレイ
ディスプレイディスプレイ
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// Display /// </summary> public class Display { /// <summary> /// 显示器品牌 /// </summary> public string Brand { get; set; } /// <summary> /// 系列名 /// </summary> public string SerialsName { get; set; } //其他属性........... } }
7.スピーカー
話すえー
8.キーボード
キーボード
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// 音箱Speakers /// </summary> public class Speakers { /// <summary> /// Speakers品牌 /// </summary> public string Brand { get; set; } /// <summary> /// Speakers系列名 /// </summary> public string SerialsName { get; set; } //其他属性........... } }
9. マウス
マウス
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// 键盘Keyboard /// </summary> public class Keyboard { /// <summary> /// Keyboard品牌 /// </summary> public string Brand { get; set; } /// <summary> /// 键盘Keyboard系列名 /// </summary> public string SerialsName { get; set; } //其他属性........... } }
10. コンピューター構成単一の構成
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// 鼠标Mouse /// </summary> public class Mouse { /// <summary> /// Mouse品牌 /// </summary> public string Brand { get; set; } /// <summary> /// 鼠标Mouse系列名 /// </summary> public string SerialsName { get; set; } //其他属性........... } }
11.
rree12. の具体的な構成特定のブランドと製品シリーズ
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { public class Config { /// <summary> /// CPU /// </summary> public CPU CPU { get; set; } /// <summary> /// 显示器 /// </summary> public Display Display { get; set; } /// <summary> /// 主板 /// </summary> public MotherBoard MotherBoard { get; set; } /// <summary> /// 内存条 /// </summary> public Memory Memory { get; set; } /// <summary> /// 硬盘 /// </summary> public HardDisk HardDisk { get; set; } /// <summary> /// 显卡 /// </summary> public GraphicCard GraphicCard { get; set; } /// <summary> /// 音箱 /// </summary> public Speakers Speakers { get; set; } /// <summary> /// 键盘 /// </summary> public Keyboard Keyboard { get; set; } /// <summary> /// 鼠标 /// </summary> public Mouse Mouse { get; set; } } }
13. コンピューター構成シートは、合計 3 つのテスト ファイル (Lenovo ThinkPad.xml、Samsung.xml、Sony のみを以下に示します) を読み取ります。添付ファイル付きでダウンロードできます
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// 电脑 /// </summary> public class Computer { /// <summary> /// CPU /// </summary> public CPU CPU { get; set; } /// <summary> /// 显示器 /// </summary> public Display Display { get; set; } /// <summary> /// 主板 /// </summary> public MotherBoard MotherBoard { get; set; } /// <summary> /// 内存条 /// </summary> public Memory Memory { get; set; } /// <summary> /// 硬盘 /// </summary> public HardDisk HardDisk { get; set; } /// <summary> /// 显卡 /// </summary> public GraphicCard GraphicCard { get; set; } /// <summary> /// 音箱 /// </summary> public Speakers Speakers { get; set; } /// <summary> /// 键盘 /// </summary> public Keyboard Keyboard { get; set; } /// <summary> /// 鼠标 /// </summary> public Mouse Mouse { get; set; } /// <summary> /// 电脑品牌厂商 /// </summary> public Manufactures Manufactures { get; set; } /// <summary> /// 属于的系列 /// </summary> public string Serials{ get; set; } /// <summary> /// 显示电脑配置 /// </summary> public void ShowConfig() { Console.WriteLine(Manufactures +"\t"+ Serials+" 系列的配置如下:"); Console.WriteLine("--------------------------------------------------"); Console.WriteLine("配件 品牌\t 系列"); Console.WriteLine("CPU " + CPU.Brand + "\t " + CPU.SerialsName + "系列"); Console.WriteLine("主板 " + MotherBoard.Brand + "\t " + MotherBoard.SerialsName + "系列"); Console.WriteLine("内存条 " + Memory.Brand + "\t " + Memory.SerialsName + "系列"); Console.WriteLine("硬盘 " + HardDisk.Brand + "\t " + HardDisk.SerialsName + "系列"); Console.WriteLine("显卡 " + GraphicCard.Brand + "\t " + GraphicCard.SerialsName + "系列"); Console.WriteLine("显示器 " + Display.Brand + "\t " + Display.SerialsName + "系列"); Console.WriteLine("音箱 " + Speakers.Brand + "\t " + Speakers.SerialsName + "系列"); Console.WriteLine("键盘 " + Keyboard.Brand + "\t " + Keyboard.SerialsName + "系列"); Console.WriteLine("鼠标 " + Mouse.Brand + "\t " + Mouse.SerialsName + "系列"); Console.WriteLine(); Console.WriteLine(); } } }14. コンピューター構成シートの取得を特に担当する単純なツールクラス
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Com.Design.Gof.Builder.Factory; namespace Com.Design.Gof.Builder { /// <summary> /// 某一个产品的配置 /// </summary> public class SerialsModel { private Config cfg = null; /// <summary> /// 获取电脑配置单 /// </summary> /// <param name="Manufactures"></param> /// <param name="SerialsName"></param> public SerialsModel(Manufactures Manufactures, string SerialsName) { cfg= ConfigFactory.GetConfig(Manufactures, SerialsName); } /// <summary> /// 具体配置,每个产品系列都有对应的产品配置单 /// </summary> public Config Cfg { get { return cfg; } } } }15. コンピューターの構築方法を定義するインターフェース
<?xml version="1.0" encoding="utf-8" ?> <products> <product Brand="lenovo" Serials="联想IdeaCentre K330"> <config> <cpu Brand="Intel">Intel 酷睿 i5 2320 </cpu> <MotherBoard Brand="华硕">华硕 H61系列</MotherBoard> <Memory Brand="金士顿">金士顿 XXXX</Memory> <HardDisk Brand="希捷">希捷1TB 7200转,SATA2</HardDisk> <GraphicCard Brand="华硕">华硕显卡XXXX</GraphicCard> <Display Brand="lenovo">联想显示器XXXX</Display> <Speakers Brand="lenovo">联想XXXX</Speakers> <Keyboard Brand="lenovo">联想键盘XXXX</Keyboard> <Mouse Brand="微软">微软鼠标XXXX</Mouse> </config> </product> <product Brand="ThinkPad" Serials="联想Y670P-IFI"> <config> <cpu Brand="Intel">Intel 酷睿i5 2450M </cpu> <MotherBoard Brand="华硕">华硕 H61系列</MotherBoard> <Memory Brand="金士顿">金士顿 XXXX</Memory> <HardDisk Brand="希捷">希捷500G XXXX</HardDisk> <GraphicCard Brand="华硕">华硕显卡XXXX</GraphicCard> <Display Brand="LG">LG显示器XXXX</Display> <Speakers Brand="漫步者">漫步者XXXX</Speakers> <Keyboard Brand="微软">微软键盘XXXX</Keyboard> <Mouse Brand="罗技">罗技鼠标XXXX</Mouse> </config> </product> <product Brand="ThinkPad" Serials="联想B470P-IFI"> <config> <cpu Brand="Intel">Intel 酷睿i5 2450M </cpu> <MotherBoard Brand="华硕">华硕 H61系列</MotherBoard> <Memory Brand="金士顿">金士顿 XXXX</Memory> <HardDisk Brand="希捷">希捷500G XXXX</HardDisk> <GraphicCard Brand="华硕">华硕显卡XXXX</GraphicCard> <Display Brand="LG">LG显示器XXXX</Display> <Speakers Brand="漫步者">漫步者XXXX</Speakers> <Keyboard Brand="微软">微软键盘XXXX</Keyboard> <Mouse Brand="长城">长城鼠标XXXX</Mouse> </config> </product> </products>16. Lenovoコンピューター
using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; using System.Xml.XPath; using System.Text; using Com.Design.Gof.Builder; using System.Xml; using System.IO; namespace Com.Design.Gof.Builder.Factory { public class ConfigFactory { /// <summary> /// 获取电脑配置单 /// </summary> /// <param name="manufactures">电脑厂商</param> /// <param name="SerialName">指定系列</param> /// <returns></returns> public static Config GetConfig(Manufactures manufactures, string SerialName) { Config cfg = new Config(); //从XML文件,加载电脑配置单 XDocument doc = XDocument.Parse(File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"\Builder\Data\" + manufactures + ".xml")); XPathNavigator nav=doc.CreateNavigator(); XPathNavigator n=nav.SelectSingleNode("/products/product[@Serials='" + SerialName.Trim() + "']"); n.MoveToChild("config",""); if (n == null) { return cfg; } string Brand = string.Empty, Serials = string.Empty; //CPU n.MoveToChild("cpu", ""); Brand = n.GetAttribute("Brand", ""); Serials = n.Value; cfg.CPU = new CPU { Brand = Brand, SerialsName = Serials }; //主板MotherBoard n.MoveToNext("MotherBoard",""); Brand = n.GetAttribute("Brand", ""); Serials = n.Value; cfg.MotherBoard = new MotherBoard { Brand = Brand, SerialsName = Serials }; //内存Memory n.MoveToNext("Memory", ""); Brand = n.GetAttribute("Brand", ""); Serials = n.Value; cfg.Memory = new Memory { Brand = Brand, SerialsName = Serials }; //硬盘HardDisk n.MoveToNext("HardDisk", ""); Brand = n.GetAttribute("Brand", ""); Serials = n.Value; cfg.HardDisk = new HardDisk { Brand = Brand, SerialsName = Serials }; //显卡GraphicCard n.MoveToNext("GraphicCard", ""); Brand = n.GetAttribute("Brand", ""); Serials = n.Value; cfg.GraphicCard = new GraphicCard { Brand = Brand, SerialsName = Serials }; //显示器Display n.MoveToNext("Display", ""); Brand = n.GetAttribute("Brand", ""); Serials = n.Value; cfg.Display = new Display { Brand = Brand, SerialsName = Serials }; //音箱Speakers n.MoveToNext("MotherBoard", ""); Brand = n.GetAttribute("Brand", ""); Serials = n.Value; cfg.Speakers = new Speakers { Brand = Brand, SerialsName = Serials }; //键盘Keyboard n.MoveToNext("Keyboard", ""); Brand = n.GetAttribute("Brand", ""); Serials = n.Value; cfg.Keyboard = new Keyboard { Brand = Brand, SerialsName = Serials }; //鼠标MotherBoard n.MoveToNext("Mouse", ""); Brand = n.GetAttribute("Brand", ""); Serials = n.Value; cfg.Mouse = new Mouse { Brand = Brand, SerialsName = Serials }; return cfg; } } }17.Sony Computer
Sony
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { public interface IBuilder { /// <summary> /// CPU /// </summary> void BuilderCPU(CPU cpu); /// <summary> /// 主板 /// </summary> void BuilderMotherBoard(MotherBoard motherBoard); /// <summary> /// 显示器 /// </summary> void BuilderDisplay(Display display); /// <summary> /// 内存条 /// </summary> void BuilderMemory(Memory memory); /// <summary> /// 硬盘 /// </summary> void BuilderHardDisk(HardDisk hardDisk); /// <summary> /// 显卡 /// </summary> void BuilderGraphicCard(GraphicCard graphicCard); /// <summary> /// 音箱 /// </summary> void BuilderSpeakers(Speakers speakers); /// <summary> /// 键盘 /// </summary> void BuilderKeyboard(Keyboard keyboard); /// <summary> /// 鼠标 /// </summary> void BuilderMouse(Mouse mouse); /// <summary> /// 获取组装好的电脑 /// </summary> /// <returns></returns> Computer GetComputer(); } }18.Samsung Computer
Samsung
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// ThinkPad品牌厂商 /// </summary> public class ThinkPad:IBuilder { Computer computer = null;//电脑 SerialsModel Serials = null;//某个产品系列的具体产品 public ThinkPad(Manufactures Manufactures, string SerialsName) { computer = new Computer { Manufactures = Manufactures, Serials = SerialsName }; Serials = new SerialsModel(Manufactures, SerialsName); } #region 装配电脑 /// <summary> /// 1.组装 CPU /// </summary> /// <param name="cpu"></param> public void BuilderCPU(CPU cpu) { computer.CPU = cpu; } /// <summary> /// 2.组装 主板 /// </summary> /// <param name="motherBoard"></param> public void BuilderMotherBoard(MotherBoard motherBoard) { computer.MotherBoard = motherBoard; } /// <summary> /// 3.组装 内存条 /// </summary> /// <param name="display"></param> public void BuilderMemory(Memory memory) { computer.Memory = memory; } /// <summary> ///4.组装 硬盘 /// </summary> /// <param name="display"></param> public void BuilderHardDisk(HardDisk hardDisk) { computer.HardDisk = hardDisk; } /// <summary> /// 5.组装 显卡 /// </summary> /// <param name="display"></param> public void BuilderGraphicCard(GraphicCard graphicCard) { computer.GraphicCard = graphicCard; } /// <summary> /// 6.组装 显示器 /// </summary> /// <param name="display"></param> public void BuilderDisplay(Display display) { computer.Display = display; } /// <summary> /// 7.组装 音箱 /// </summary> /// <param name="display"></param> public void BuilderSpeakers(Speakers speakers) { computer.Speakers = speakers; } /// <summary> /// 8.组装 键盘 /// </summary> /// <param name="display"></param> public void BuilderKeyboard(Keyboard keyboard) { computer.Keyboard = keyboard; } /// <summary> /// 9.组装 鼠标 /// </summary> /// <param name="display"></param> public void BuilderMouse(Mouse mouse) { computer.Mouse = mouse; } #endregion /// <summary> /// 获取组装后的电脑 /// </summary> /// <returns></returns> public Computer GetComputer() { //步骤1--CPU BuilderCPU(Serials.Cfg.CPU); //步骤2---主板 BuilderMotherBoard(Serials.Cfg.MotherBoard); //步骤3--内存条 BuilderMemory(Serials.Cfg.Memory); //步骤4--硬盘 BuilderHardDisk(Serials.Cfg.HardDisk); //步骤5--显卡 BuilderGraphicCard(Serials.Cfg.GraphicCard); //步骤6--显示器 BuilderDisplay(Serials.Cfg.Display); //步骤7--音箱 BuilderSpeakers(Serials.Cfg.Speakers); //步骤8--键盘 BuilderKeyboard(Serials.Cfg.Keyboard); //步骤9--鼠标 BuilderMouse(Serials.Cfg.Mouse); return computer; } } }19.美しい店員さんがパソコンの購入を案内してくれます
れぇ
20.メイン関数呼び出しusing System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Builder { /// <summary> /// Sony索尼品牌厂商 /// </summary> public class Sony:IBuilder { Computer computer = null;//电脑 SerialsModel Serials = null;//某个产品系列的具体产品 public Sony(Manufactures Manufactures, string SerialsName) { computer = new Computer { Manufactures = Manufactures, Serials = SerialsName }; Serials = new SerialsModel(Manufactures, SerialsName); } #region 装配电脑 /// <summary> /// 1.组装 CPU /// </summary> /// <param name="cpu"></param> public void BuilderCPU(CPU cpu) { computer.CPU = cpu; } /// <summary> /// 2.组装 主板 /// </summary> /// <param name="motherBoard"></param> public void BuilderMotherBoard(MotherBoard motherBoard) { computer.MotherBoard = motherBoard; } /// <summary> /// 3.组装 内存条 /// </summary> /// <param name="display"></param> public void BuilderMemory(Memory memory) { computer.Memory = memory; } /// <summary> ///4.组装 硬盘 /// </summary> /// <param name="display"></param> public void BuilderHardDisk(HardDisk hardDisk) { computer.HardDisk = hardDisk; } /// <summary> /// 5.组装 显卡 /// </summary> /// <param name="display"></param> public void BuilderGraphicCard(GraphicCard graphicCard) { computer.GraphicCard = graphicCard; } /// <summary> /// 6.组装 显示器 /// </summary> /// <param name="display"></param> public void BuilderDisplay(Display display) { computer.Display = display; } /// <summary> /// 7.组装 音箱 /// </summary> /// <param name="display"></param> public void BuilderSpeakers(Speakers speakers) { computer.Speakers = speakers; } /// <summary> /// 8.组装 键盘 /// </summary> /// <param name="display"></param> public void BuilderKeyboard(Keyboard keyboard) { computer.Keyboard = keyboard; } /// <summary> /// 9.组装 鼠标 /// </summary> /// <param name="display"></param> public void BuilderMouse(Mouse mouse) { computer.Mouse = mouse; } #endregion /// <summary> /// 获取组装后的电脑 /// </summary> /// <returns></returns> public Computer GetComputer() { //步骤1--CPU BuilderCPU(Serials.Cfg.CPU); //步骤2---主板 BuilderMotherBoard(Serials.Cfg.MotherBoard); //步骤3--内存条 BuilderMemory(Serials.Cfg.Memory); //步骤4--硬盘 BuilderHardDisk(Serials.Cfg.HardDisk); //步骤5--显卡 BuilderGraphicCard(Serials.Cfg.GraphicCard); //步骤6--显示器 BuilderDisplay(Serials.Cfg.Display); //步骤7--音箱 BuilderSpeakers(Serials.Cfg.Speakers); //步骤8--键盘 BuilderKeyboard(Serials.Cfg.Keyboard); //步骤9--鼠标 BuilderMouse(Serials.Cfg.Mouse); return computer; } } }21. 実行結果
当初は各コンピューターアクセサリを改良したかったのですが、プロジェクトが非常に大きく、コンピューター製品には多くの属性があることがわかりました。したがって、2 つのフィールドのみがリストされています。
添付ファイルにはプログラムのソースコードが含まれています。コンソールや Web など、他のプロジェクトのテストも含まれます。
以上がコンピューターの構成の問題を解決するための C# のビルダー ジェネレーター モードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。