博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#设计模式系列 8 ----Builder 生成器模式之--发工资了,带老婆到 岗顶百脑汇配置电脑...
阅读量:5171 次
发布时间:2019-06-13

本文共 23515 字,大约阅读时间需要 78 分钟。

   1.理论定义

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

   2.应用举例

          需求描述:话说发工资了,打算去岗顶百脑汇  给老婆配置一台电脑。

                        OK,坐着BRT,就出发了。

                        到岗顶,一美女扑面而来,面带微笑:先生,请问看中那个品牌,过来看一下嘛!

                        人家都开口了,盛情难却,就看下吧。

   3.具体编码

         1.CPU

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{    ///     /// CPU    ///     public class CPU    {        ///         /// CPU品牌        ///         public string Brand { get; set; }        ///         /// CPU系列名        ///         public string SerialsName { get; set; }        //其他属性...........    }}

2.主板

主板MotherBoard
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{    ///     /// 主板    ///     public class MotherBoard    {        ///         /// 主板品牌        ///         public string Brand { get; set; }        ///         /// 主板系列名        ///        public string SerialsName { get; set; }        //其他属性...........    }}

3.内存条

内存条Memory
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{      ///     /// Memory    ///     public class Memory    {        ///         /// Memory品牌        ///         public string Brand { get; set; }        ///         /// Memory系列名        ///         public string SerialsName { get; set; }        //其他属性...........    }}

4.硬盘

硬盘HardDisk
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{    ///     /// HardDisk    ///     public class HardDisk    {        ///         /// HardDisk品牌        ///         public string Brand { get; set; }        ///         /// HardDisk系列名        ///         public string SerialsName { get; set; }        //其他属性...........    }}

5.显卡

显卡GraphicCard
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{    ///     ///显卡 GraphicCard    ///     public class GraphicCard    {        ///         /// 显卡GraphicCard品牌        ///         public string Brand { get; set; }        ///         /// 显卡GraphicCard系列名        ///         public string SerialsName { get; set; }        //其他属性...........    }}

6.显示器

显示器Display
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{    ///     /// Display    ///     public class Display    {        ///         /// 显示器品牌        ///         public string Brand { get; set; }      ///       /// 系列名      ///       public string SerialsName { get; set; }        //其他属性...........    }}

7.音箱

音箱Speakers
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{      ///     /// 音箱Speakers    ///     public class Speakers    {        ///         /// Speakers品牌        ///         public string Brand { get; set; }        ///         /// Speakers系列名        ///         public string SerialsName { get; set; }        //其他属性...........    }}

8.键盘

键盘Keyboard
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{      ///     /// 键盘Keyboard    ///     public class Keyboard    {        ///         /// Keyboard品牌        ///         public string Brand { get; set; }        ///         /// 键盘Keyboard系列名        ///         public string SerialsName { get; set; }        //其他属性...........    }}

9.鼠标

鼠标Mouse
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{    ///     /// 鼠标Mouse    ///     public class Mouse    {        ///         /// Mouse品牌        ///         public string Brand { get; set; }        ///         /// 鼠标Mouse系列名        ///         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    {        ///         /// CPU        ///         public CPU CPU { get; set; }        ///         /// 显示器        ///         public Display Display { get; set; }        ///         /// 主板        ///         public MotherBoard MotherBoard { get; set; }        ///         /// 内存条        ///         public Memory Memory { get; set; }        ///         /// 硬盘        ///         public HardDisk HardDisk { get; set; }        ///         /// 显卡        ///         public GraphicCard GraphicCard { get; set; }        ///         /// 音箱        ///         public Speakers Speakers { get; set; }        ///         /// 键盘        ///         public Keyboard Keyboard { get; set; }        ///         /// 鼠标        ///         public Mouse Mouse { get; set; }          }}

 

11.一台电脑Computer

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{    ///     /// 电脑    ///     public  class Computer    {        ///         /// CPU        ///         public CPU CPU { get; set; }        ///         /// 显示器        ///         public Display Display { get; set; }         ///         /// 主板        ///         public MotherBoard MotherBoard { get; set; }        ///         /// 内存条        ///         public Memory Memory { get; set; }        ///         /// 硬盘        ///         public HardDisk HardDisk { get; set; }        ///         /// 显卡        ///         public GraphicCard GraphicCard { get; set; }        ///         /// 音箱        ///         public Speakers Speakers { get; set; }        ///         /// 键盘        ///         public Keyboard Keyboard { get; set; }        ///         /// 鼠标        ///         public Mouse Mouse { get; set; }        ///         /// 电脑品牌厂商        ///         public Manufactures Manufactures { get; set; }        ///         /// 属于的系列        ///         public string Serials{ get; set; }        ///         /// 显示电脑配置        ///         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{    ///     /// 某一个产品的配置    ///     public class SerialsModel    {        private Config cfg = null;        ///         /// 获取电脑配置单        ///         ///         ///         public SerialsModel(Manufactures Manufactures, string SerialsName)        {                      cfg= ConfigFactory.GetConfig(Manufactures, SerialsName);        }        ///         /// 具体配置,每个产品系列都有对应的产品配置单        ///         public Config Cfg        {            get { return cfg; }                   }    }}

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

Intel 酷睿 i5 2320
华硕 H61系列
金士顿 XXXX
希捷1TB 7200转,SATA2
华硕显卡XXXX
联想显示器XXXX
联想XXXX
联想键盘XXXX
微软鼠标XXXX
Intel 酷睿i5 2450M
华硕 H61系列
金士顿 XXXX
希捷500G XXXX
华硕显卡XXXX
LG显示器XXXX
漫步者XXXX
微软键盘XXXX
罗技鼠标XXXX
Intel 酷睿i5 2450M
华硕 H61系列
金士顿 XXXX
希捷500G XXXX
华硕显卡XXXX
LG显示器XXXX
漫步者XXXX
微软键盘XXXX
长城鼠标XXXX

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    {        ///         /// 获取电脑配置单        ///         /// 电脑厂商        /// 指定系列        /// 
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    {        ///         /// CPU        ///         void BuilderCPU(CPU cpu);        ///         /// 主板        ///         void BuilderMotherBoard(MotherBoard motherBoard);        ///         /// 显示器        ///         void BuilderDisplay(Display display);        ///         /// 内存条        ///         void BuilderMemory(Memory memory);        ///         /// 硬盘        ///         void BuilderHardDisk(HardDisk hardDisk);        ///         /// 显卡        ///         void BuilderGraphicCard(GraphicCard graphicCard);        ///         /// 音箱        ///         void BuilderSpeakers(Speakers speakers);        ///         /// 键盘        ///         void BuilderKeyboard(Keyboard keyboard);        ///         /// 鼠标        ///         void BuilderMouse(Mouse mouse);        ///         /// 获取组装好的电脑        ///         /// 
Computer GetComputer(); }}

 

16.联想电脑

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Com.Design.Gof.Builder{    ///     /// ThinkPad品牌厂商    ///     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 装配电脑        ///         /// 1.组装 CPU        ///         ///         public void BuilderCPU(CPU cpu)        {            computer.CPU = cpu;        }        ///         /// 2.组装 主板        ///         ///         public void BuilderMotherBoard(MotherBoard motherBoard)        {            computer.MotherBoard = motherBoard;        }        ///         /// 3.组装 内存条        ///         ///         public void BuilderMemory(Memory memory)        {            computer.Memory = memory;        }        ///         ///4.组装 硬盘        ///         ///         public void BuilderHardDisk(HardDisk hardDisk)        {            computer.HardDisk = hardDisk;        }        ///         /// 5.组装 显卡        ///         ///         public void BuilderGraphicCard(GraphicCard graphicCard)        {            computer.GraphicCard = graphicCard;        }        ///         /// 6.组装 显示器        ///         ///         public void BuilderDisplay(Display display)        {            computer.Display = display;        }        ///         /// 7.组装 音箱        ///         ///         public void BuilderSpeakers(Speakers speakers)        {            computer.Speakers = speakers;        }        ///         /// 8.组装 键盘        ///         ///         public void BuilderKeyboard(Keyboard keyboard)        {            computer.Keyboard = keyboard;        }        ///         /// 9.组装 鼠标        ///         ///         public void BuilderMouse(Mouse mouse)        {            computer.Mouse = mouse;        }        #endregion              ///         /// 获取组装后的电脑        ///         /// 
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{    ///     /// Sony索尼品牌厂商    ///     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 装配电脑        ///         /// 1.组装 CPU        ///         ///         public void BuilderCPU(CPU cpu)        {            computer.CPU = cpu;        }        ///         /// 2.组装 主板        ///         ///         public void BuilderMotherBoard(MotherBoard motherBoard)        {            computer.MotherBoard = motherBoard;        }        ///         /// 3.组装 内存条        ///         ///         public void BuilderMemory(Memory memory)        {            computer.Memory = memory;        }        ///         ///4.组装 硬盘        ///         ///         public void BuilderHardDisk(HardDisk hardDisk)        {            computer.HardDisk = hardDisk;        }        ///         /// 5.组装 显卡        ///         ///         public void BuilderGraphicCard(GraphicCard graphicCard)        {            computer.GraphicCard = graphicCard;        }        ///         /// 6.组装 显示器        ///         ///         public void BuilderDisplay(Display display)        {            computer.Display = display;        }        ///         /// 7.组装 音箱        ///         ///         public void BuilderSpeakers(Speakers speakers)        {            computer.Speakers = speakers;        }        ///         /// 8.组装 键盘        ///         ///         public void BuilderKeyboard(Keyboard keyboard)        {            computer.Keyboard = keyboard;        }        ///         /// 9.组装 鼠标        ///         ///         public void BuilderMouse(Mouse mouse)        {            computer.Mouse = mouse;        }        #endregion              ///         /// 获取组装后的电脑        ///         /// 
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{    ///     /// Samsung索尼品牌厂商    ///     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 装配电脑        ///         /// 1.组装 CPU        ///         ///         public void BuilderCPU(CPU cpu)        {            computer.CPU = cpu;        }        ///         /// 2.组装 主板        ///         ///         public void BuilderMotherBoard(MotherBoard motherBoard)        {            computer.MotherBoard = motherBoard;        }        ///         /// 3.组装 内存条        ///         ///         public void BuilderMemory(Memory memory)        {            computer.Memory = memory;        }        ///         ///4.组装 硬盘        ///         ///         public void BuilderHardDisk(HardDisk hardDisk)        {            computer.HardDisk = hardDisk;        }        ///         /// 5.组装 显卡        ///         ///         public void BuilderGraphicCard(GraphicCard graphicCard)        {            computer.GraphicCard = graphicCard;        }        ///         /// 6.组装 显示器        ///         ///         public void BuilderDisplay(Display display)        {            computer.Display = display;        }        ///         /// 7.组装 音箱        ///         ///         public void BuilderSpeakers(Speakers speakers)        {            computer.Speakers = speakers;        }        ///         /// 8.组装 键盘        ///         ///         public void BuilderKeyboard(Keyboard keyboard)        {            computer.Keyboard = keyboard;        }        ///         /// 9.组装 鼠标        ///         ///         public void BuilderMouse(Mouse mouse)        {            computer.Mouse = mouse;        }        #endregion              ///         /// 获取组装后的电脑        ///         /// 
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{    ///     /// 电脑厂家,销售员指导 消费者 要购买那个 品牌 的电脑    ///     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    {              ///         /// 电脑配置        ///         public void ShowConfig()        {            Builder.GetComputer().ShowConfig();        }        ///         /// 制造商        ///         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。

  这里是附件

转载于:https://www.cnblogs.com/HCCZX/archive/2012/08/08/2628452.html

你可能感兴趣的文章
ubuntu的home目录下,Desktop等目录消失不见
查看>>
建立,查询二叉树 hdu 5444
查看>>
[Spring框架]Spring 事务管理基础入门总结.
查看>>
2017.3.24上午
查看>>
Python-常用模块及简单的案列
查看>>
LeetCode 159. Longest Substring with At Most Two Distinct Characters
查看>>
基本算法概论
查看>>
jquery动态移除/增加onclick属性详解
查看>>
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>