设计模式之C#实现---Builder
作者: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#实现那么肯定少不了代码了,这次我想说的更清楚一些,我打算从如下两个方面来实现,首先我想要直接实现他的结构,也就是我们在下面的图中看到的那些类。接着我将用以个具体的例子或者书上的例子描述一下用来加深理解,希望我的描述可以帮助你更好的学习。
从图上我们可以看出我们的Builder接口中有两个BuilderPart方法A、B,以及一个GetResult方法用来返回创建的对象。将我们用ConcreteBuilder1和ConcreteBuilder1实现接口的时候我们分别在其中加入了一个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。
设计模式之C#实现---Builder相关推荐
- 设计模式学习笔记——建造者(Builder)模式
设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...
- c++设计模式--构建器(builder pattern)
一.原理讲解 1.1意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 1.2应用场景 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时: 当构造过程必 ...
- 07、人人都会设计模式:建造者模式--Builder
PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/300cbb9ee7f2 本文出自 TigerChain 简书 人人都会设计模式 教程简介 ...
- 设计模式(四)Builder设计模式
文章目录 1.定义以及UML建模图: 2.使用场景: 3.核心类 (1) 抽象产品类 computer (2) Builder 抽象Builder,规范产品的组建,一般是由子类实现具体的组建过程. ( ...
- Java设计模式 - 建造模式(Builder Pattern)
一.定义.使用场景及要点 在<设计模式>中原话是这样的:"separate the construction of a complex object from its repre ...
- Java 设计模式——建造者模式(Builder Pattern)
前言 一.简介 二.实现方式 三.常见第一种方式 (1)一般有以下几个角色 (2)举个例子 (3)具体步骤 (4)具体代码 三.第二种方式 (1)主要有三个角色:抽象建造者.具体建造者.产品 (2) ...
- Android设计模式之建造者模式builder
今天小编来说一下Android中的一种设计模式--建造者模式Builder 绪论: 那么对于Android初级来说,Builder设计模式可能在我们开发中用过的很少,但是我们可能见过,我们经常用的Al ...
- 设计模式之构建者(Builder)模式
在五大设计原则的基础上经过GOF(四人组)的总结,得出了23种经典设计模式,其中分为三大类:创建型(5种).结构型(7种).行为型(11种).今天对创建型中的构建者(Builder)模式的思想进行了一 ...
- 二十三种设计模式[3] - 生成器模式(Builder Pattern)
前言 生成器,又名建造者模式,属于创建型模式.在<设计模式 - 可复用的面向对象软件>一书中对它的描述为" 将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表 ...
最新文章
- Halcon算子盘点:Chapter 16:System
- tkmybatis 子查询_dnssearch 子域名枚举工具
- 济南长清104国道科目三考试流程(转载)
- Word -- 列表重新编号
- Python 3.8 稳定版正式发布,新特性全面解读
- java file的相对路径_JAVA File的建立及相对路径绝对路径
- 阿里发力线下渠道,腾讯京东该如何打破其流量优势?
- 云络科技服务器管理基础架构
- 土壤有机质空间分布数据
- Android键盘映射
- python不是5的倍数_python – 低于1000的3或5的所有倍数的总和
- 恶趣味程序之《徒有其表》
- SPA项目开发之首页导航+左侧菜单
- python等于号怎么输入_python 中不等于怎么表示
- 解读2017之容器篇:后Kubernetes时代
- The second day :天猫精灵玩法之创建意图,实现对话功能
- 如何免费下载IEEE论文
- 每日分享之《生命树》
- 邮箱前缀是什么?该怎么设置?
- 全数字OQPSK调制解调的基本算法,包括成形滤波器、NCO模型、载波恢复
热门文章
- 中医大计算机应用基础考试题6,中医大 计算机应用基础 复习题 参考资料.docx
- Java学习路线图,如何学习Java事半功倍?
- 面试必问---Java线程池8大拒绝策略
- javascript如何实现功能的分析
- 和12岁小同志搞创客开发:如何使用继电器?
- TinkerNode NB-IoT物联网开发板(NB-IoT专栏—拓展篇3)
- 1.一步一步移植ucos到stm32f103开发版(修订版)
- 学习java周期_Java第一作业周期总结
- 插入网络CSS矢量图标、网络SVG矢量图标
- JUnit单元测试依赖包构建路径错误解决办法