引言:

建造者的特点是过程,需要建造对象的过程是一样的,如:软件项目,过程都是,POC、投标、立项、软件过程、收款,那么标准的软件项目都是这个过程,只是不同的项目在做这个过程的内容不一样。所以需要有一个过程,这个过程需要被抽象出来(接口化),不同的项目实现不同的过程。

上面的过程,是有顺序的,POC、投标、立项、软件过程、收款,这个过程不能乱,所以需要有一个指挥官来固定建造的顺序。

结合上述两点,就是一个建造的的模式了,理论的说法是:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

理解:

建造者模式通常包括下面几个角色:

1. builder:给出一个抽象接口,以规范产品对象的各个组成部分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。

2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。

3. Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

4. Product:要创建的复杂对象。

UML图:(出之http://www.cnblogs.com/zhenyulu/articles/37378.html

代码示例:

// 创建车的过程
public interface IBuilder
{
void BuildPartA();
void BuildPartB();
Car GetCar();
}
// A车
public class ConcreteBuilderA : IBuilder
{
Car car = new Car();
public void BuildPartA()
{
car.Add("Build A Car part1");
} public void BuildPartB()
{
car.Add("Build A Car part2");
} public Car GetCar()
{
return car;
}
}
// B车
public class ConcreteBuilderB : IBuilder
{
Car car = new Car();
public void BuildPartA()
{
car.Add("Build B Car part1");
} public void BuildPartB()
{
car.Add("Build B Car part1");
} public Car GetCar()
{
return car;
}
}
// 车对象
public class Car
{
ArrayList parts = new ArrayList(); public void Add(string part)
{
parts.Add(part);
} public void Show()
{
Console.WriteLine(" Car Parts -------");
foreach (string part in parts)
Console.WriteLine(part);
}
}
// 指挥者
public class Director
{
public void BuilderCar(IBuilder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
static void Main(string[] args)
{
// 指挥者
Director director = new Director();
// 建造对象1
IBuilder b1 = new ConcreteBuilderA();
// 建造对象2
IBuilder b2 = new ConcreteBuilderB();
// 执行对象1
director.BuilderCar(b1);
Car c1 = b1.GetCar();
c1.Show();
// 执行对象2
director.BuilderCar(b2);
Car c2 = b2.GetCar();
c2.Show(); Console.ReadKey();
}

从代码我们可以进一步的确认,需要建造的对象有不同的部分,如:partA、partB、....,建造这些部分的顺序是固定的A、B、....。

我们需要抽象出建造这些部分的接口,从而实现建造一样有A、B、....部分的不同商品。

总结:

1.使用建造者模式可以使客户端不必知道产品内部组成的细节。

2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。

3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

使用的场景:

1.创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。

2.要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。

代码下载:

百度网盘 http://pan.baidu.com/s/1gdHsIdX

CSDN http://download.csdn.net/detail/hater22/6842403

.Net设计模式_建造者模式的更多相关文章

  1. java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

  2. 实践GoF的23种设计模式:建造者模式

    摘要:针对这种对象成员较多,创建对象逻辑较为繁琐的场景,非常适合使用建造者模式来进行优化. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简 ...

  3. Java设计模式之建造者模式(Builder)

    前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ...

  4. C#设计模式(5)——建造者模式(Builder Pattern)

    一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象, ...

  5. 【GOF23设计模式】建造者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...

  6. C++设计模式之建造者模式(三)

    4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外.还能够通过Director类来更加精细地控制产品的创建过程.比如添加一类称之为钩子方法(HookMethod)的特殊方法来控制是 ...

  7. 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)

    原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...

  8. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  9. C#设计模式之四建造者模式(Builder Pattern)【创建型】

    一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一 ...

随机推荐

  1. 《深入理解linux内核》第一章 序论

    硬链接的限制

  2. WordPress Backdoor未授权访问漏洞和信息泄露漏洞

    漏洞名称: WordPress Backdoor未授权访问漏洞和信息泄露漏洞 CNNVD编号: CNNVD-201312-497 发布时间: 2013-12-27 更新时间: 2013-12-27 危 ...

  3. Linux kernel AACRAID Driver Compat IOCTL 本地安全绕过漏洞

    漏洞名称: Linux kernel AACRAID Driver Compat IOCTL 本地安全绕过漏洞 CNNVD编号: CNNVD-201311-390 发布时间: 2013-11-29 更 ...

  4. EFI脚本

    https://software.intel.com/en-us/articles/efi-shells-and-scripting

  5. Shape 与 InlineShape 的区别

    Shape 对象代表文档中的图形对象,InlineShape 代表文档中的嵌入式图形对象.所谓嵌入式图形对象,是指将图像作为文字处理,在排版上以文字的方式进行排版. Shape 与 InlineSha ...

  6. CLR via C# 读书笔记 6-2 不同AppDomain之间的通信 z

    跨AppDomain通信有两种方式 1.Marshal By reference : 传递引用 2.Marshal By Value : 把需要传递的对象 通过序列化反序列化的方式传递过去(值拷贝) ...

  7. Hierarchy--分层。单词意思即为分层视图。

    英文释义:Hierarchy--分层.单词意思即为分层视图. 功能:层次Viewer允许你调试和优化您的用户界面.还可以学习别人做好的UI界面,它提供了一个布局的视图层次结构(布局视图)的视觉表现和放 ...

  8. [Irving] Android 点击两次返回退出系统

    Activity 中定义成员变量: private Long firstClickTime = 0l; //记录第一次点击时间 重载OnKeyDown方法 代码: @Override public b ...

  9. IIS7 性能(内存、CPU、当前请求耗时)监测

    程序上线了,但运行过程中如果发现很CPU.内存异常,某些操作耗时,如何在生产环境中监测并查明原因呢,有以下几种工具(方式): 1.NProfiler,这是一个商业软件,有试用周期,可以监测包括Winf ...

  10. 动态代理入门(jdk)

    动态代理就是aop的核心,动态代理简单的就是通过创建一个代理对象,然后把原来的方法增强.很抽象,例子是王道.jdk中提供了动态代理的实现,但是它是针对接口,如果要实现动态代理,需要被代理对象的接口.这 ...