微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#中Builder生成器模式解决配置电脑的问题详解

这篇文章主要介绍了C#设计模式之Builder生成器模式解决带老婆配置电脑问题,简单介绍了生成器模式的概念、功能并结合具体实例形式分析了C#生成器模式解决配电脑问题的步骤与相关操作技巧,需要的朋友可以参考下

本文实例讲述了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.运行结果

22.总结

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐