C#設(shè)計(jì)模式之Builder生成器模式解決帶老婆配置電腦問(wèn)題實(shí)例
本文實(shí)例講述了C#設(shè)計(jì)模式之Builder生成器模式解決帶老婆配置電腦問(wèn)題。分享給大家供大家參考,具體如下:
一、理論定義
生成器模式 又叫:建造者模式,它 可以 把一個(gè) 復(fù)雜的對(duì)象,分步驟創(chuàng)建。
二、應(yīng)用舉例
需求描述:話說(shuō)發(fā)工資了,打算去崗頂百腦匯 給老婆配置一臺(tái)電腦。
OK,坐著B(niǎo)RT,就出發(fā)了。
到崗頂,一美女撲面而來(lái),面帶微笑:先生,請(qǐng)問(wèn)看中那個(gè)品牌,過(guò)來(lái)看一下嘛!
人家都開(kāi)口了,盛情難卻,就看下吧。
三、具體編碼
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.內(nèi)存條
內(nèi)存條Memory
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.硬盤(pán)
硬盤(pán)HardDisk
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.顯卡
顯卡GraphicCard
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.顯示器
顯示器Display
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.音箱
音箱Speakers
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; }
//其他屬性...........
}
}
8.鍵盤(pán)
鍵盤(pán)Keyboard
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Builder
{
/// <summary>
/// 鍵盤(pán)Keyboard
/// </summary>
public class Keyboard
{
/// <summary>
/// Keyboard品牌
/// </summary>
public string Brand { get; set; }
/// <summary>
/// 鍵盤(pán)Keyboard系列名
/// </summary>
public string SerialsName { get; set; }
//其他屬性...........
}
}
9.鼠標(biāo)
鼠標(biāo)Mouse
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Builder
{
/// <summary>
/// 鼠標(biāo)Mouse
/// </summary>
public class Mouse
{
/// <summary>
/// Mouse品牌
/// </summary>
public string Brand { get; set; }
/// <summary>
/// 鼠標(biāo)Mouse系列名
/// </summary>
public string SerialsName { get; set; }
//其他屬性...........
}
}
10.電腦配置單Config
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>
/// 內(nèi)存條
/// </summary>
public Memory Memory { get; set; }
/// <summary>
/// 硬盤(pán)
/// </summary>
public HardDisk HardDisk { get; set; }
/// <summary>
/// 顯卡
/// </summary>
public GraphicCard GraphicCard { get; set; }
/// <summary>
/// 音箱
/// </summary>
public Speakers Speakers { get; set; }
/// <summary>
/// 鍵盤(pán)
/// </summary>
public Keyboard Keyboard { get; set; }
/// <summary>
/// 鼠標(biāo)
/// </summary>
public Mouse Mouse { get; set; }
}
}
11.一臺(tái)電腦Computer
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>
/// 內(nèi)存條
/// </summary>
public Memory Memory { get; set; }
/// <summary>
/// 硬盤(pán)
/// </summary>
public HardDisk HardDisk { get; set; }
/// <summary>
/// 顯卡
/// </summary>
public GraphicCard GraphicCard { get; set; }
/// <summary>
/// 音箱
/// </summary>
public Speakers Speakers { get; set; }
/// <summary>
/// 鍵盤(pán)
/// </summary>
public Keyboard Keyboard { get; set; }
/// <summary>
/// 鼠標(biāo)
/// </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("內(nèi)存條 " + Memory.Brand + "\t " + Memory.SerialsName + "系列");
Console.WriteLine("硬盤(pán) " + 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("鍵盤(pán) " + Keyboard.Brand + "\t " + Keyboard.SerialsName + "系列");
Console.WriteLine("鼠標(biāo) " + Mouse.Brand + "\t " + Mouse.SerialsName + "系列");
Console.WriteLine(); Console.WriteLine();
}
}
}
12.某一品牌 某一系列 產(chǎn)品的 具體配置
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Design.Gof.Builder.Factory;
namespace Com.Design.Gof.Builder
{
/// <summary>
/// 某一個(gè)產(chǎn)品的配置
/// </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>
/// 具體配置,每個(gè)產(chǎn)品系列都有對(duì)應(yīng)的產(chǎn)品配置單
/// </summary>
public Config Cfg
{
get { return cfg; }
}
}
}
13.電腦配置單,讀取的是XML文件,一共有三個(gè)測(cè)試文件,聯(lián)想ThinkPad.xml,三星.xml,索尼.xml,下面只顯示聯(lián)想,其他的隨附件下載
<?xml version="1.0" encoding="utf-8" ?> <products> <product Brand="lenovo" Serials="聯(lián)想IdeaCentre K330"> <config> <cpu Brand="Intel">Intel 酷睿 i5 2320 </cpu> <MotherBoard Brand="華碩">華碩 H61系列</MotherBoard> <Memory Brand="金士頓">金士頓 XXXX</Memory> <HardDisk Brand="希捷">希捷1TB 7200轉(zhuǎn),SATA2</HardDisk> <GraphicCard Brand="華碩">華碩顯卡XXXX</GraphicCard> <Display Brand="lenovo">聯(lián)想顯示器XXXX</Display> <Speakers Brand="lenovo">聯(lián)想XXXX</Speakers> <Keyboard Brand="lenovo">聯(lián)想鍵盤(pán)XXXX</Keyboard> <Mouse Brand="微軟">微軟鼠標(biāo)XXXX</Mouse> </config> </product> <product Brand="ThinkPad" Serials="聯(lián)想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="微軟">微軟鍵盤(pán)XXXX</Keyboard> <Mouse Brand="羅技">羅技鼠標(biāo)XXXX</Mouse> </config> </product> <product Brand="ThinkPad" Serials="聯(lián)想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="微軟">微軟鍵盤(pán)XXXX</Keyboard> <Mouse Brand="長(zhǎng)城">長(zhǎng)城鼠標(biāo)XXXX</Mouse> </config> </product> </products>
14.一個(gè)專門負(fù)責(zé)獲取電腦 配置單的 簡(jiǎn)單工具類
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 };
//內(nèi)存Memory
n.MoveToNext("Memory", "");
Brand = n.GetAttribute("Brand", "");
Serials = n.Value;
cfg.Memory = new Memory { Brand = Brand, SerialsName = Serials };
//硬盤(pán)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 };
//鍵盤(pán)Keyboard
n.MoveToNext("Keyboard", "");
Brand = n.GetAttribute("Brand", "");
Serials = n.Value;
cfg.Keyboard = new Keyboard { Brand = Brand, SerialsName = Serials };
//鼠標(biāo)MotherBoard
n.MoveToNext("Mouse", "");
Brand = n.GetAttribute("Brand", "");
Serials = n.Value;
cfg.Mouse = new Mouse { Brand = Brand, SerialsName = Serials };
return cfg;
}
}
}
15.一個(gè)接口,定義了如何構(gòu)建一個(gè)電腦
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>
/// 內(nèi)存條
/// </summary>
void BuilderMemory(Memory memory);
/// <summary>
/// 硬盤(pán)
/// </summary>
void BuilderHardDisk(HardDisk hardDisk);
/// <summary>
/// 顯卡
/// </summary>
void BuilderGraphicCard(GraphicCard graphicCard);
/// <summary>
/// 音箱
/// </summary>
void BuilderSpeakers(Speakers speakers);
/// <summary>
/// 鍵盤(pán)
/// </summary>
void BuilderKeyboard(Keyboard keyboard);
/// <summary>
/// 鼠標(biāo)
/// </summary>
void BuilderMouse(Mouse mouse);
/// <summary>
/// 獲取組裝好的電腦
/// </summary>
/// <returns></returns>
Computer GetComputer();
}
}
16.聯(lián)想電腦
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;//某個(gè)產(chǎn)品系列的具體產(chǎn)品
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.組裝 內(nèi)存條
/// </summary>
/// <param name="display"></param>
public void BuilderMemory(Memory memory)
{
computer.Memory = memory;
}
/// <summary>
///4.組裝 硬盤(pán)
/// </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.組裝 鍵盤(pán)
/// </summary>
/// <param name="display"></param>
public void BuilderKeyboard(Keyboard keyboard)
{
computer.Keyboard = keyboard;
}
/// <summary>
/// 9.組裝 鼠標(biāo)
/// </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--內(nèi)存條
BuilderMemory(Serials.Cfg.Memory);
//步驟4--硬盤(pán)
BuilderHardDisk(Serials.Cfg.HardDisk);
//步驟5--顯卡
BuilderGraphicCard(Serials.Cfg.GraphicCard);
//步驟6--顯示器
BuilderDisplay(Serials.Cfg.Display);
//步驟7--音箱
BuilderSpeakers(Serials.Cfg.Speakers);
//步驟8--鍵盤(pán)
BuilderKeyboard(Serials.Cfg.Keyboard);
//步驟9--鼠標(biāo)
BuilderMouse(Serials.Cfg.Mouse);
return computer;
}
}
}
17.索尼電腦
Sony
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;//某個(gè)產(chǎn)品系列的具體產(chǎn)品
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.組裝 內(nèi)存條
/// </summary>
/// <param name="display"></param>
public void BuilderMemory(Memory memory)
{
computer.Memory = memory;
}
/// <summary>
///4.組裝 硬盤(pán)
/// </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.組裝 鍵盤(pán)
/// </summary>
/// <param name="display"></param>
public void BuilderKeyboard(Keyboard keyboard)
{
computer.Keyboard = keyboard;
}
/// <summary>
/// 9.組裝 鼠標(biāo)
/// </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--內(nèi)存條
BuilderMemory(Serials.Cfg.Memory);
//步驟4--硬盤(pán)
BuilderHardDisk(Serials.Cfg.HardDisk);
//步驟5--顯卡
BuilderGraphicCard(Serials.Cfg.GraphicCard);
//步驟6--顯示器
BuilderDisplay(Serials.Cfg.Display);
//步驟7--音箱
BuilderSpeakers(Serials.Cfg.Speakers);
//步驟8--鍵盤(pán)
BuilderKeyboard(Serials.Cfg.Keyboard);
//步驟9--鼠標(biāo)
BuilderMouse(Serials.Cfg.Mouse);
return computer;
}
}
}
18.三星電腦
三星
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Builder
{
/// <summary>
/// Samsung索尼品牌廠商
/// </summary>
public class Samsung:IBuilder
{
Computer computer = null;//電腦
SerialsModel Serials = null;//某個(gè)產(chǎn)品系列的具體產(chǎn)品
public Samsung(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.組裝 內(nèi)存條
/// </summary>
/// <param name="display"></param>
public void BuilderMemory(Memory memory)
{
computer.Memory = memory;
}
/// <summary>
///4.組裝 硬盤(pán)
/// </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.組裝 鍵盤(pán)
/// </summary>
/// <param name="display"></param>
public void BuilderKeyboard(Keyboard keyboard)
{
computer.Keyboard = keyboard;
}
/// <summary>
/// 9.組裝 鼠標(biāo)
/// </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--內(nèi)存條
BuilderMemory(Serials.Cfg.Memory);
//步驟4--硬盤(pán)
BuilderHardDisk(Serials.Cfg.HardDisk);
//步驟5--顯卡
BuilderGraphicCard(Serials.Cfg.GraphicCard);
//步驟6--顯示器
BuilderDisplay(Serials.Cfg.Display);
//步驟7--音箱
BuilderSpeakers(Serials.Cfg.Speakers);
//步驟8--鍵盤(pán)
BuilderKeyboard(Serials.Cfg.Keyboard);
//步驟9--鼠標(biāo)
BuilderMouse(Serials.Cfg.Mouse);
return computer;
}
}
}
19.美女銷售員,指導(dǎo)我們買電腦
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Builder
{
/// <summary>
/// 電腦廠家,銷售員指導(dǎo) 消費(fèi)者 要購(gòu)買那個(gè) 品牌 的電腦
/// </summary>
public enum Manufactures
{
Acer宏碁=1, Alienware=2,長(zhǎng)城=3,
戴爾=4, 東芝=5, 典籍=6, 多彩=7,
DCMOFA=8,ESER宇朔=9,富士通=10,
方正=11,Gateway華碩=12, 惠普=13,
海爾=14, 瀚斯寶麗=15,Intel=16,
技嘉=17,聯(lián)想=18, 聯(lián)想ThinkPad=19,
雷蛇=20, LG=21, 鐳波=22,
msi微星=23, 明唐=24,NEC=25,
蘋(píng)果=26,清華=27,同方=28,
七喜=29, 七彩虹=30,神舟=31,
索尼=32, 三星=33, 松下=34,
史密斯=35, 索泰=36, 神酷=37,
TerransForce=38,微軟=39, 萬(wàn)利達(dá)=40,
新藍(lán)=41,優(yōu)派=42
}
public class Salesman
{
/// <summary>
/// 電腦配置
/// </summary>
public void ShowConfig()
{
Builder.GetComputer().ShowConfig();
}
/// <summary>
/// 制造商
/// </summary>
public IBuilder Builder { get; set; }
}
}
20.主函數(shù)調(diào)用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Design.Gof.Builder;
namespace Com.Design.Gof.Test
{
class Program
{
static void Main(string[] args)
{
//這位先生,請(qǐng)問(wèn)你看中哪個(gè)型號(hào)?這邊來(lái)看下吧!
Salesman salesman = new Salesman();
//美女介紹的 第一臺(tái)電腦
salesman.Builder = new ThinkPad(Manufactures.聯(lián)想ThinkPad, "聯(lián)想IdeaCentre K330");
salesman.ShowConfig(); //電腦配置
//第二臺(tái)電腦
salesman.Builder = new Sony(Manufactures.索尼, "索尼E14A17ECW");
salesman.ShowConfig(); //電腦配置
//第三臺(tái)電腦
salesman.Builder = new Samsung(Manufactures.三星, "三星300E4A-S0G");
salesman.ShowConfig(); //電腦配置
Console.ReadKey();
}
}
}
21.運(yùn)行結(jié)果
22.總結(jié)
本來(lái)想把每個(gè)電腦配件再細(xì)化,發(fā)現(xiàn)工程很大,電腦 產(chǎn)品的屬性很多,所以只列出2個(gè)字段。
附件里面包括了程序源碼。也包括其他項(xiàng)目的測(cè)試,有控制臺(tái),有web。
附:完整實(shí)例代碼點(diǎn)擊此處本站下載。
更多關(guān)于C#相關(guān)內(nèi)容還可查看本站專題:《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#窗體操作技巧匯總》、《C#常見(jiàn)控件用法教程》、《WinForm控件用法總結(jié)》、《C#數(shù)組操作技巧總結(jié)》及《C#面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》
希望本文所述對(duì)大家C#程序設(shè)計(jì)有所幫助。
上一篇:C# .NET中Socket簡(jiǎn)單實(shí)用框架的使用教程
欄 目:C#教程
下一篇:C#中foreach循環(huán)對(duì)比f(wàn)or循環(huán)的優(yōu)勢(shì)和劣勢(shì)
本文標(biāo)題:C#設(shè)計(jì)模式之Builder生成器模式解決帶老婆配置電腦問(wèn)題實(shí)例
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/5487.html
您可能感興趣的文章
- 01-10深入淺出23種設(shè)計(jì)模式
- 01-10C#一個(gè)簡(jiǎn)單的定時(shí)小程序?qū)崿F(xiàn)代碼
- 01-10微信開(kāi)放平臺(tái)之網(wǎng)站授權(quán)微信登錄功能
- 01-10C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量二
- 01-10C#編程自學(xué)之開(kāi)篇介紹
- 01-10C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量三
- 01-10C#編程自學(xué)之運(yùn)算符和表達(dá)式
- 01-10C#編程自學(xué)之類和對(duì)象
- 01-10C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一
- 01-10C#編程自學(xué)之流程控制語(yǔ)句


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 04-02jquery與jsp,用jquery


