• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 深入解析C#设计模式编程中对建造者模式的运用

深入解析C#设计模式编程中对建造者模式的运用

作者:LearningHard 字体:[增加 减小] 来源:互联网 时间:2017-05-28

LearningHard 通过本文主要向大家介绍了c语言深入解析,深入解析mfc,深入解析sas,深入解析sas pdf,深入解析atl等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

示例

我们先来以这样一个场景引入: 
在电脑城装机总有这样的经历。我们到了店里,先会有一个销售人员来询问你希望装的机器是怎么样的配置,他会给你一些建议,最终会形成一张装机单。和客户确定了装机配置以后,他会把这张单字交给提货的人,由他来准备这些配件,准备完成后交给装机技术人员。技术人员会把这些配件装成一个整机交给客户。

不管是什么电脑,它总是由CPU、内存、主板、硬盘以及显卡等部件构成的,并且装机的过程总是固定的:

  • 把主板固定在机箱中
  • 把CPU安装到主板上
  • 把内存安装到主板上
  • 把硬盘连接到主板上
  • 把显卡安装到主板上

但是,每台兼容机的部件都各不相同的,有些配置高一点,有些配置低一点,这是变化点。对于装机技术人员来说,他不需要考虑这些配件从哪里来的,他只需要把他们组装在一起了,这是稳定的装机流程。要把这种变化的配件和稳定的流程进行分离就需要引入Builder模式。
示例代码

using System;

using System.Collections.Generic;

using System.Text;

using System.Reflection;

 

namespace BuilderExemple

{

  classProgram

  {

    staticvoid Main(string[] args)

    {

      ComputerFactory factory = newComputerFactory();

      ComputerBuilder office = newOfficeComputerBuilder();

      factory.BuildComputer(office);

      office.Computer.ShowSystemInfo();

      ComputerBuilder game = newGameComputerBuilder();

      factory.BuildComputer(game);

      game.Computer.ShowSystemInfo();

    }

  }

 

  classComputerFactory

  {

    publicvoid BuildComputer(ComputerBuilder cb)

    {

      Console.WriteLine();

      Console.WriteLine(">>>>>>>>>>>>>>>>>>Start Building " + cb.Name);

      cb.SetupMainboard();

      cb.SetupCpu();

      cb.SetupMemory();

      cb.SetupHarddisk();

      cb.SetupVideocard();

      Console.WriteLine(">>>>>>>>>>>>>>>>>>Build " + cb.Name + " Completed");

      Console.WriteLine();

    }

  }

 

  abstractclassComputerBuilder

  {

    protectedstring name;

 

    publicstring Name

    {

      get { return name; }

      set { name = value; }

    }

 

    protectedComputer computer;

 

    publicComputer Computer

    {

      get { return computer; }

      set { computer = value; }

    }

 

    public ComputerBuilder()

    {

      computer = newComputer();

    }

 

    publicabstractvoid SetupMainboard();

    publicabstractvoid SetupCpu();

    publicabstractvoid SetupMemory();

    publicabstractvoid SetupHarddisk();

    publicabstractvoid SetupVideocard();

  }

 

  classOfficeComputerBuilder : ComputerBuilder

  {

    public OfficeComputerBuilder()

    {

      name = "OfficeComputer";

    }

 

    publicoverridevoid SetupMainboard()

    {

      computer.Mainboard = "Abit升技LG-95C 主板(Intel 945GC芯片组/LGA 775/1066MHz) ";

    }

 

    publicoverridevoid SetupCpu()

    {

      computer.Cpu = "Intel 英特尔赛扬D 336 (2.8GHz/LGA 775/256K/533MHz) ";

    }

 

    publicoverridevoid SetupMemory()

    {

      computer.Memory = "Patriot博帝DDR2 667 512MB 台式机内存";

    }

 

    publicoverridevoid SetupHarddisk()

    {

      computer.Harddisk = "Hitachi日立SATAII接口台式机硬盘(80G/7200转/8M)盒装";

    }

 

    publicoverridevoid SetupVideocard()

    {

      computer.Videocard = "主板集成";

    }

  }

 

  classGameComputerBuilder : ComputerBuilder

  {

    public GameComputerBuilder()

    {

      name = "GameComputer";

    }

 

    publicoverridevoid SetupMainboard()

    {

      computer.Mainboard = "GIGABYTE技嘉GA-965P-DS3 3.3 主板(INTEL P965 东莞产)" ;

    }

 

    publicoverridevoid SetupCpu()

    {

      computer.Cpu = "Intel 英特尔酷睿E4400 (2.0GHz/LGA 775/2M/800MHz)盒装";

    }

 

    publicoverridevoid SetupMemory()

    {

      computer.Memory = "G.SKILL 芝奇F2-6400CL5D-2GBNQ DDR2 800 1G*2台式机内存";

    }

 

    publicoverridevoid SetupHarddisk()

    {

      computer.Harddisk = "Hitachi日立SATAII接口台式机硬盘(250G/7200转/8M)盒装";

    }

 

    publicoverridevoid SetupVideocard()

    {

      computer.Videocard = "七彩虹逸彩GT-GD3 UP烈焰战神H10 显卡(GeForce 8600GT/256M/DDR3)支持HDMI!";

    }

  }

 

  classComputer

  {

    privatestring videocard;

 

    publicstring Videocard

    {

      get { return videocard; }

      set { videocard = value; }

    }

 

    privatestring cpu;

 

    publicstring Cpu

    {

      get { return cpu; }

      set { cpu = value; }

    }

 

    privatestring mainboard;

 

    publicstring Mainboard

    {

      get { return mainboard; }

      set { mainboard = value; }

    }

 

    privatestring memory;

 

    publicstring Memory

    {

      get { return memory; }

      set { memory = value; }

    }

 

    privatestring harddisk;

 

    publicstring Harddisk

    {

      get { return harddisk; }

      set { harddisk = value; }

    }

 

    publicvoid ShowSystemInfo()

    {

      Console.WriteLine("==================SystemInfo==================");

      Console.WriteLine("CPU:" + cpu);

      Console.WriteLine("MainBoard:" + mainboard);

      Console.WriteLine("Memory:" + memory);

      Console.WriteLine("VideoCard:" + videocard);

      Console.WriteLine("HardDisk:" + harddisk);

    }

  }

}

</div>

代码说明: 

ComputerFactory是建造者模式的指导者。指导者做的是稳定的建造工作,假设它就是一个技术人员,他只是在做按照固定的流程,把配件组装成计算机的重复劳动工作。他不知道他现在组装的是一台游戏电脑还是一台办公用电脑,他也不知道他往主板上安装的内存是1G还是2G的。呵呵,看来是不称职的技术人员。

ComputerBuilder是抽象建造者角色。它主要是用来定义两种接口,一种接口用于规范产品的各个部分的组成。比如,这里就规定了组装一台电脑所需要的5个工序。第二种接口用于返回建造后的产品,在这里我们没有定义抽象方法,反正建造出来的总是电脑。

OfficeComputerBuilder和GameComputerBuilder是具体的建造者。他的工作就是实现各建造步骤的接口,以及实现返回产品的接口,在这里后者省略了。

Computer就是建造出来的复杂产品。在代码中,我们的各种建造步骤都是为创建产品中的各种配件服务的,Computer定义了一个相对具体的产品,在应用中可以把这个产品进行比较高度的抽象,使得不同的具体建造者甚至可以建造出完全不同的产品。

看看客户端的代码,用户先是选择了一个具体的Builder,用户应该很明确它需要游戏电脑还是办公电脑,但是它可以对电脑一无所知,由销售人员给出一个合理的配置单。然后用户让ComputerFactory去为它组装这个电脑。组装完成后ComputerFactory开机,给用户验收电脑的配置是否正确。

你或许觉得ComputerBuilder和是抽象工厂模式中的抽象工厂角色差不多,GameComputerBuilder又像是具体工厂。其实,建造者模式和抽象工厂模式的侧重点不同,前者强调一个组装的概念,一个复杂对象由多个零件组装而成并且组装是按照一定的标准射顺序进行的,而后者强调的是创建一系列产品。建造者模式适用于组装一台电脑,而抽象工厂模式适用于提供用户笔记本电脑、台式电脑和掌上电脑的产品系列。


建造者模式的定义和类图
  介绍完了建造者模式的具体实现之后吗,下面具体看下建造者模式的具体定义是怎样的。

建造者模式(Builder Pattern):将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式使得建造代码与表示代码的分离,可以使客户端不必知道产品内部组成的细节,从而降低了客户端与具体产品之间的耦合度,下面通过类图来帮助大家更好地理清建造者模式中类之间的关系。

2016217151228462.png (761×411)

建造者模式的分析
介绍完了建造者模式的具体实现之后,让我们总结下建造模式的实现要点:

在建造者模

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 深入解析C#设计模式中对桥接模式的具体运用
  • 深入解析C#设计模式编程中对建造者模式的运用
  • 深入解析C#编程中泛型委托的使用
  • 深入解析C#中的泛型类与泛型接口
  • 深入解析C#中的abstract抽象类
  • 深入解析C#编程中struct所定义的结构
  • 深入解析C#中的交错数组与隐式类型的数组

相关文章

  • 2017-05-28浅谈c# 面向对象之类与对象
  • 2017-05-28C#结合数据库实现验证识别ID卡内容的方法
  • 2017-05-28WinForm实现为ComboBox绑定数据源并提供下拉提示功能
  • 2017-05-28C#图像边缘检测(Roberts)的方法
  • 2017-05-28C#中调用DLL时未能加载文件或程序集错误的处理方法(详解)
  • 2017-05-28浅谈C#中的常量、类型推断和作用域
  • 2017-05-28C# 文件下载之断点续传实现代码
  • 2017-05-28C#面向对象特征的具体实现及作用详解
  • 2017-05-28C#实现获取文件夹大小的方法
  • 2017-05-28WinForm实现同时让两个窗体有激活效果的特效实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#中文随机数实现方法
    • C#实现根据年份计算生肖属相的方法
    • C#中实现在32位、64位系统下自动切换不同的SQLite dll文件
    • C#遍历集合与移除元素的方法
    • C# Redis学习系列(一)Redis下载安装使用
    • Microsoft Expression Web 简体中文正式版 官方下载地址
    • C#生成Code39条形码而非条形码字体的方法
    • C#接口在派生类和外部类中的调用方法示例
    • gridview 显示图片的实例代码
    • C#中实现多继承的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有