C#设计模式系列 8 ----Builder 生成器模式之--发工资了,带老婆到 岗顶百脑汇配置电脑

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

内存条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#设计模式系列 8 ----Builder 生成器模式之--发工资了,带老婆到 岗顶百脑汇配置电脑

22.总结

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

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

  这里是附件下载(Download)

你可能感兴趣的:(builder)