一、概述
在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的。生成器模式可以处理这类对象的构建,它提供了一种封装机制来隔离各类子对象的变化,从而保证系统的稳定。
二、生成器模式
生成器模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。其结构图如下:

Builder为创建Product对象的各个子对象指定抽象接口。
ConcreteBuilder实现了Builder接口,用于创建Product对象的各个子对象。
Director使用Builder来创建Product对象。
Product表示被构造的复杂对象。
三、示例
我们以普通汽车和高级汽车的创建为例来展示一下生成器模式的应用。
首先创建抽象的Builder

1     interface ICarBuilder
2 {
3 void BuilderWheels();
4 void BuilderWindows();
5 }

接着创建普通汽车的Builder和高级汽车的Builder

 1     public class BasicBuilder : ICarBuilder
2 {
3 public void BuilderWheels()
4 {
5 Console.WriteLine("Builder Basic Wheels");
6 }
7
8 public void BuilderWindows()
9 {
10 Console.WriteLine("Builder Basic Windows");
11 }
12 }
13
14 public class AdvancedBuilder : ICarBuilder
15 {
16 public void BuilderWheels()
17 {
18 Console.WriteLine("Builder Advanced Wheels");
19 }
20
21 public void BuilderWindows()
22 {
23 Console.WriteLine("Builder Advanced Windows");
24 }
25 }

然后创建汽车建造工厂,它使用Builder来创建不同种类的汽车

 1     class CarFactory
2 {
3 public ICarBuilder Builder { get; set; }
4
5 public CarFactory(ICarBuilder builder)
6 {
7 Builder = builder;
8 }
9
10 public void CreateCar()
11 {
12 Builder.BuilderWheels();
13 Builder.BuilderWindows();
14 }
15 }

最后看一下如何调用

1     static void Main(string[] args)
2 {
3 CarFactory game = new CarFactory(new BasicBuilder());
4 game.CreateCar();
5 game.Builder = new AdvancedBuilder();
6 game.CreateCar();
7 Console.ReadLine();
8 }
 
 

C#设计模式——生成器模式(Builder Pattern)的更多相关文章

  1. 设计模式十: 生成器模式(Builder Pattern)

    简介 生成器模式属于创建型模式的一种, 又叫建造者模式. 生成器模式涉及4个关键角色:产品(Product),抽象生成器(builder),具体生成器(ConcreteBuilder),指挥者(Dir ...

  2. 设计模式 - 建造者模式 Builder Pattern

    简介 场景 在创建复杂对象时,用户无须关心该对象所包含的属性以及它们的组装方式,只需要指定复杂对象的类型和内容就可以构建它们. 模式定义 建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程 ...

  3. 23种设计模式--建造者模式-Builder Pattern

    一.建造模式的介绍       建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建 ...

  4. 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  5. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

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

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

  7. 【设计模式】建造者模式 Builder Pattern

    前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...

  8. iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...

  9. 二十四种设计模式:建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...

随机推荐

  1. P2P资料

    常用链接 openstack创建实例的方法 http://www.cnblogs.com/popsuper1982/p/3800426.html qemu官网 http://wiki.qemu.org ...

  2. android TypedValue.applyDimension()的作用

    这个方法是转变为标准尺寸的一个函数,例如 int size = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, cont ...

  3. 每日英语:The Secret About Online Ad Traffic: One-Third Is Bogus

    Billions of dollars are flowing into online advertising. But marketers also are confronting an uncom ...

  4. awstats 日志分析工具linux下的安装和使用

    合并日志文件可以使用 bash 的sort命令: -o log_all access*.log 也可以使用  awstats 提供的 logresolvemerge.pl -showsteps acc ...

  5. (笔记)Linux内核学习(九)之内核内存管理方式

    一 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU)把虚拟地址转换为物理 地址,通常以页为单位进行处理.MMU以页大小为单位来管理系统中的也表. 32位系统:页大小4KB 64位系统:页 ...

  6. 气球或者泡泡向上飘动 jQuery插件

    圣诞.元旦要来了,公司以往基本每个月至少要搞一两款手机小游戏来宣传产品,这次也不例外!! 之前做过,按压柚子.许愿.吃柚子等等小游戏,这次是做个那种 气球向上飘动,戳破气球,随机获取奖品.如下图: 手 ...

  7. python + hadoop (案例)

    python如何链接hadoop,并且使用hadoop的资源,这篇文章介绍了一个简单的案例! 一.python的map/reduce代码 首先认为大家已经对haoop已经有了很多的了解,那么需要建立m ...

  8. kail2在虚拟机上的安装

    首先先要安装虚拟机,打开安装包,下一步               选择典型 选择要安装到的目录,点下一步 4 输入密钥,下一步(密钥网上有很多我这边就例举一个,没用的话就自己找.我这个密钥是VM11 ...

  9. Python strange questions list

    sys.setrecursionlimit(1<<64) Line 3: OverflowError: Python int too large to convert to C long ...

  10. makeJar

    task makeJar(type: Jar) { //指定生成的jar名 baseName 'plugin' //从哪里打包class文件 from('build/intermediates/cla ...