C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例

作者:GhostRider 时间:2021-07-09 03:22:59 

本文实例讲述了C#设计模式之Builder生成器模式解决带老婆配置电脑问题。分享给大家供大家参考,具体如下:

一、理论定义

生成器模式 又叫:建造者模式,它  可以 把一个 复杂的对象,分步骤创建。

二、应用举例

需求描述:话说发工资了,打算去岗顶百脑汇  给老婆配置一台电脑。
OK,坐着BRT,就出发了。
到岗顶,一美女扑面而来,面带微笑:先生,请问看中那个品牌,过来看一下嘛!
人家都开口了,盛情难却,就看下吧。

三、具体编码

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.内存条

内存条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.硬盘

硬盘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.键盘

键盘Keyboard


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; }
   //其他属性...........
 }
}

9.鼠标

鼠标Mouse


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; }
   //其他属性...........
 }
}

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>
   /// 内存条
   /// </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; }
 }
}

11.一台电脑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>
   /// 内存条
   /// </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();
   }
 }
}

12.某一品牌 某一系列 产品的 具体配置


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; }
   }
 }
}

13.电脑配置单,读取的是XML文件,一共有三个测试文件,联想ThinkPad.xml,三星.xml,索尼.xml,下面只显示联想,其他的随附件下载


<?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>

14.一个专门负责获取电脑 配置单的 简单工具类


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;
   }
 }
}

15.一个接口,定义了如何构建一个电脑


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();
 }
}

16.联想电脑


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;
   }
 }
}

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;//某个产品系列的具体产品
   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;
   }
 }
}

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;//某个产品系列的具体产品
   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.组装 内存条
   /// </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.美女销售员,指导我们买电脑


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Builder
{
 /// <summary>
 /// 电脑厂家,销售员指导 消费者 要购买那个 品牌 的电脑
 /// </summary>
 public enum Manufactures
 {
   Acer宏碁=1, Alienware=2,长城=3,
   戴尔=4, 东芝=5, 典籍=6, 多彩=7,
   DCMOFA=8,ESER宇朔=9,富士通=10,
   方正=11,Gateway华硕=12, 惠普=13,
   海尔=14, 瀚斯宝丽=15,Intel=16,
   技嘉=17,联想=18, 联想ThinkPad=19,
   雷蛇=20, LG=21, 镭波=22,
   msi微星=23, 明唐=24,NEC=25,
   苹果=26,清华=27,同方=28,
   七喜=29, 七彩虹=30,神舟=31,
   索尼=32, 三星=33, 松下=34,
   史密斯=35, 索泰=36, 神酷=37,
   TerransForce=38,微软=39, 万利达=40,
   新蓝=41,优派=42
 }
 public class Salesman
 {
   /// <summary>
   /// 电脑配置
   /// </summary>
   public void ShowConfig()
   {
     Builder.GetComputer().ShowConfig();
   }
   /// <summary>
   /// 制造商
   /// </summary>
   public IBuilder Builder { get; set; }
 }
}

20.主函数调用


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)
   {
     //这位先生,请问你看中哪个型号?这边来看下吧!
     Salesman salesman = new Salesman();
     //美女介绍的  第一台电脑
     salesman.Builder = new ThinkPad(Manufactures.联想ThinkPad, "联想IdeaCentre K330");
     salesman.ShowConfig();  //电脑配置
     //第二台电脑
     salesman.Builder = new Sony(Manufactures.索尼, "索尼E14A17ECW");
     salesman.ShowConfig();  //电脑配置
     //第三台电脑
     salesman.Builder = new Samsung(Manufactures.三星, "三星300E4A-S0G");
     salesman.ShowConfig();  //电脑配置
     Console.ReadKey();
   }
 }
}

21.运行结果

C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例

22.总结

本来想把每个电脑配件再细化,发现工程很大,电脑 产品的属性很多,所以只列出2个字段。

附件里面包括了程序源码。也包括其他项目的测试,有控制台,有web。

附:完整实例代码点击此处本站下载

希望本文所述对大家C#程序设计有所帮助。

来源:http://www.cnblogs.com/HCCZX/archive/2012/08/08/2628452.html

标签:C#,设计模式,生成器模式
0
投稿

猜你喜欢

  • SpringBoot数据访问自定义使用Druid数据源的方法

    2023-01-10 16:29:38
  • C#设计模式之Facade外观模式解决天河城购物问题示例

    2023-06-10 08:28:36
  • 深入理解C#窗体关闭事件

    2023-06-01 14:38:56
  • Java实现一个顺序表的完整代码

    2023-09-21 01:00:59
  • Kotlin 基础教程之数组容器

    2021-09-09 17:22:40
  • android使用PullToRefresh实现下拉刷新和上拉加载

    2023-08-06 11:06:58
  • Java中notify和notifyAll的区别及何时使用

    2022-07-03 02:08:43
  • 使用Android studio3.6的java api方式调用opencv

    2023-10-10 17:16:38
  • Java中关于字符串的编码方式

    2023-01-30 04:59:45
  • android开发仿ios的UIScrollView实例代码

    2023-08-07 01:55:20
  • java高并发写入用户信息到数据库的几种方法

    2023-07-09 08:45:49
  • 详解Android更改APP语言模式的实现过程

    2023-05-18 16:56:35
  • Android Flutter实现3D动画效果示例详解

    2022-04-12 19:34:35
  • 15个顶级Java多线程面试题(附答案)

    2023-11-24 01:53:44
  • Maven本地打包war包实现代码解析

    2021-09-06 12:51:14
  • C#写入对象或集合类型数据到xml文件的方法

    2022-11-12 17:11:37
  • c#使用Unity粒子实现炮塔发射系统

    2023-11-04 19:05:19
  • android中图形图像处理之drawable用法分析

    2023-01-13 07:45:03
  • C# WPF后台动态添加控件实战教程

    2022-07-29 18:52:51
  • Java开发实现人机猜拳游戏

    2023-10-17 16:01:35
  • asp之家 软件编程 m.aspxhome.com