设计模式之C#实现---Builder

原创 2004年10月30日 16:31:00
作者:cuike519的专栏   http://blog.csdn.net/cuike519/

我们将要介绍一个和它比较像的创建型模式
Builder(至于关于Builder的详细内容您可以参考GOF的书,在这里不重复了。)。在GOF的书里Builder的目的是这样的:Separate the construction of a complex object from its representation so that the same construction process can create different representations.在我的程序设计中很难免会使用复杂的对象比如:车的组成、电脑的组成以及人在内。那么我们在创建电脑这个对象的时候我想我们需要一步一步的创建组成电脑的每一部分,先创建CPU对象、Memory对象、HardDisk对象等等。Builder就是这样一种模式用来一步一步的创建对象的每一部分。回忆一下AbstractFactory也是创建一族相关的对象,Builder也是创建一些相关的对象,两者之间的区别很微妙需要在以后的实践中细细体会。

既然文章叫设计模式之C#实现那么肯定少不了代码了,这次我想说的更清楚一些,我打算从如下两个方面来实现,首先我想要直接实现他的结构,也就是我们在下面的图中看到的那些类。接着我将用以个具体的例子或者书上的例子描述一下用来加深理解,希望我的描述可以帮助你更好的学习。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

       从图上我们可以看出我们的Builder接口中有两个BuilderPart方法AB,以及一个GetResult方法用来返回创建的对象。将我们用ConcreteBuilder1ConcreteBuilder1实现接口的时候我们分别在其中加入了一个Private的对象,用来返回建立好的对象,在该实例的内部则是经过了两步才完成了Product对象的初始化。我们建立的Product是由一个Hashtable组成,可以添加和显示自己的每一个部分(就是Hashtable里面的每一个键/值)。好了不废话了看看下面的实现代码,在WinForm中调试通过,你可以参看本系列的AbstractFactory文章找到里面的相关表现对象(RichTextBox)。

       代码中有少量的注释是为了更好的理解。

using System;

 

namespace Builder_Me{

 

       using System.Collections;

 

       // specifies an abstract interface for creating parts of a Product object.

       //为创建对象的一个部分指定一个接口

       public interface Builder{

              void BuildPartA();

              void BuildPartB();

              Product GetResult();

       }

 

       // constructs and assembles parts of the product by impementing the Builder interface.

       // defines and keeps track of the representation it creates.

       // provides an interface for retrieving the product.

       public class ConcreteBuilder1 : Builder{

              private Product m_Product;

              public void BuildPartA(){

                     this.m_Product = new Product();

                     this.m_Product.AddParts("1","PartA");

              }

              public void BuildPartB(){

                     this.m_Product.AddParts("2","PartB");

              }

 

              public Product GetResult(){

                     return this.m_Product;

              }

       }

 

       public class ConcreteBuilder2 : Builder{

              private Product m_Product;

 

              public void BuildPartA(){

                     //必须先调用该方法否则不能实例化对象

                     this.m_Product = new Product();

                     this.m_Product.AddParts("3","Part1");

              }

 

              public void BuildPartB(){

                     this.m_Product.AddParts("4","Part2");

              }

 

              public Product GetResult(){

                     return this.m_Product;

              }

       }

 

       // construct an object using the Builder interface.

       public class Director{

              public void Construct(Builder builder){

                     //顺序不能变

                     builder.BuildPartA();

                     builder.BuildPartB();

              }

       }

 

       // represents the complex object under construction.ConcreteBuilder builds

       // the product's internal representation and defines the process by which it's

       // assembled.

       // includes classes that define the constituent parts,including interfaces for

       // assembling the parts into the final result.

       //要创建复杂的对象该对象我们用Hashtable组合表示。

       public class Product{

              Hashtable m_Parts = new Hashtable();

 

              public void AddParts(string partKey,string partValue){

                     this.m_Parts.Add(partKey,partValue);

              }

 

              public string ShowSelfParts(){

                     string strResult = string.Empty;

                     int i = 1;

                     foreach(string strTmp in this.m_Parts.Values){

                            strResult +="Part"+i.ToString()+":/t"+strTmp+"/n";

                            i++;

                     }

                     return strResult;

              }

       }

}

 

客户端的代码片断如下:

Director director = new Director();

                     Builder builder1 = new ConcreteBuilder1();

                     Builder builder2 = new ConcreteBuilder2();

                     director.Construct( builder1 );

                     Product p1 = builder1.GetResult();

                     this.richTextBox1.AppendText(p1.ShowSelfParts());

 

                     director.Construct( builder2 );

                     Product p2 = builder2.GetResult();

                     this.richTextBox1.AppendText(p2.ShowSelfParts());

由于GOF的例子是C++实现所以转换成C#也非常容易,我在这里就不转换了,有兴趣的人可以转换跟帖。

本人能力有限,如果在上面有什么说错的或者不准确地方请网友指正,我将虚心学习,我的email:wu_jian830@hotmail.com

版权声明:本文为博主原创文章,未经博主允许不得转载。

【java设计模式】之 建造者(Builder)模式

我们还是举上一节的例子:生产汽车。上一节我们通过模板方法模式控制汽车跑起来的动作,那么需求是无止境的,现在如果老板又增加了额外的需求:汽车启动、停止、鸣笛引擎声都由客户自己控制,他想要什么顺序就什么顺...
  • eson_15
  • eson_15
  • 2016年05月06日 08:59
  • 5067

浅谈JAVA设计模式之——建造者模式(Builder)

一、概述 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2.当构造过程必须允许被...
  • l1028386804
  • l1028386804
  • 2015年05月02日 21:22
  • 9808

设计模式之C#实现---Builder

我们将要介绍一个和它比较像的创建型模式Builder(至于关于Builder的详细内容您可以参考GOF的书,在这里不重复了。)。在GOF的书里Builder的目的是这样的:Separate the c...
  • jxufewbt
  • jxufewbt
  • 2007年05月07日 14:56
  • 532

设计模式之—建造者模式(Builder)-Java实现

Builder模式,将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部 表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模...
  • fuhao715
  • fuhao715
  • 2012年01月12日 13:58
  • 3467

设计模式学习之Builder模式

建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离。Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道...
  • hjxgood
  • hjxgood
  • 2017年04月21日 15:09
  • 512

设计模式之禅——状态模式

我们每个人都乘过电梯,电梯的动作:开门、关门、运行、停止。现在我们用程序来实现一个电梯的动作,先看类图设计,如图所示现在看一下代码public interface ILift { //开启电梯...
  • TyroneRenekton
  • TyroneRenekton
  • 2017年01月28日 16:43
  • 2063

C#设计模式之Builder

名称:Builder 结构:  意图: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。  适用性 : 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式...
  • kybd2006
  • kybd2006
  • 2007年06月29日 18:49
  • 500

Android开发中无处不在的设计模式——Builder模式

上一篇文章介绍了单例模式,这一篇继续介绍一个常见的模式——Builder模式。那么什么是Builder模式呢。你通过搜索,会发现大部分晚上的定义都是 将一个复杂对象的构建与它的表示分离,使得同样的...
  • sbsujjbcy
  • sbsujjbcy
  • 2015年10月18日 10:16
  • 5097

设计模式之四 --- 建造(Builder)模式

【1】基本概念            建造(Builder)模式是一种对象构建的设计模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象...
  • cjjky
  • cjjky
  • 2012年03月07日 01:01
  • 16995

《设计模式之禅》读书笔记之C#版--结构类模式

备注:由于读的电子书版本是pdf的,影印都有些看不清楚。所有练习代码都单独放到了GitHub上方便以后查看。 https://github.com/yuhezhangyanru/DesignPatt...
  • Stephanie_1
  • Stephanie_1
  • 2017年03月23日 16:03
  • 256
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式之C#实现---Builder
举报原因:
原因补充:

(最多只允许输入30个字)