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

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)的更多相关文章
- 设计模式十: 生成器模式(Builder Pattern)
简介 生成器模式属于创建型模式的一种, 又叫建造者模式. 生成器模式涉及4个关键角色:产品(Product),抽象生成器(builder),具体生成器(ConcreteBuilder),指挥者(Dir ...
- 设计模式 - 建造者模式 Builder Pattern
简介 场景 在创建复杂对象时,用户无须关心该对象所包含的属性以及它们的组装方式,只需要指定复杂对象的类型和内容就可以构建它们. 模式定义 建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程 ...
- 23种设计模式--建造者模式-Builder Pattern
一.建造模式的介绍 建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建 ...
- 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...
- 【设计模式】建造者模式 Builder Pattern
前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...
- iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...
- 二十四种设计模式:建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...
随机推荐
- PMBOK/CMM/CMMI/OPM3
1968年为了解决大型软件项目的软件危机,北大西洋公约组织(NATO)提出了“软件工程”这一术语,以改进软件开发设计过程. 1969年美国项目管理协会(PMI)组织成立,从1981年起经过30年的努力 ...
- Microsoft.Web.RedisSessionStateProvider 运行异常问题
System.TimeoutException: Timeout performing GET MyKey, inst: 2, mgr: Inactive, queue: 6, qu: 0, qs: ...
- java生成解析xml的另外两种方法Xstream
Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...
- 学习之路三十八:Hook(钩子)的学习
好久没写文章了,还记得年前面试了一家公司,为了检测一下我的学习能力,给了我一个任务,做一个自动登录并自动操作菜单的程序. 花了几天的时间研究了Hook以及使用WindowsAPI操作程序的知识,现在记 ...
- Flink 案例整合
1.概述 Flink 1.1.0 版本已经在官方发布了,官方博客于 2016-08-08 更新了 Flink 1.1.0 的变动.在这 Flink 版本的发布,添加了 SQL 语法这一特性.这对于业务 ...
- SQL语句 - 基本查询
select select_list [ into new_table ] from table_source [ where search_condition ] [ group by broup_ ...
- 解决HP打印机错误:Couldn't open fifo
我的是因为选错了打印机协议,一开始选成了“互联网打印协议 - IPP”. 解决方案:删除原有打印机配置,重新选择协议为“HP Jetdirect-Socket”即可.
- XCActionBar 「Xcode 中的 Alfred」
下载地址:https://github.com/pdcgomes/XCActionBar 基本命令: (1)「command+shift+8」或者双击「command」键可以打开「动作输入框窗口」 ( ...
- QT在windows下实现截屏操作并保存为png图片
QPixmap originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId()); QString format = ...
- 项目演化系列--验证体系(基于angular的前端验证)
前言 之前分享的<web项目演化--验证体系>中提到基于angular的验证,但是为了以防读者迷惑,能够好的理解验证体系,所以没有详细介绍. 今天特地补写一篇关于构建angular的验证. ...