设计模式C#实现(七)——生成器模式
2015-09-17 10:46
176 查看
生成器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
UML类图:
![](http://images2015.cnblogs.com/blog/751394/201509/751394-20150917111811398-976633866.png)
构成:
1.Builder(接口/抽象类)定义了创建一个产品Product的各个部件的方法,返回创建好的产品。
2.Director 调用Builder创建部件的方法,对产品的创建进行控制
3.ConcreteBuilder 实现/重写 Builder的方法,负责创建Product各个部件
4.Product 被创建的对象
以手机为例,在这里Builder使用抽象类提供了,提供了空的方法作为默认的部件创建方法和创建、返回产品两个方法,也可以定义为接口让具体类去实现
一个生成苹果手机的ConcreteBuilder
Director负责调用Builder
要生成的产品Phone
执行代码
![](http://images2015.cnblogs.com/blog/751394/201509/751394-20150917103156023-318196186.png)
效果:
1.变更产品,只需定义一个新的ConcreteBuilder
2.Director对产品的构造过程可以精细控制(每个部件创建的先后顺序?还有什么?)
UML类图:
![](http://images2015.cnblogs.com/blog/751394/201509/751394-20150917111811398-976633866.png)
构成:
1.Builder(接口/抽象类)定义了创建一个产品Product的各个部件的方法,返回创建好的产品。
2.Director 调用Builder创建部件的方法,对产品的创建进行控制
3.ConcreteBuilder 实现/重写 Builder的方法,负责创建Product各个部件
4.Product 被创建的对象
以手机为例,在这里Builder使用抽象类提供了,提供了空的方法作为默认的部件创建方法和创建、返回产品两个方法,也可以定义为接口让具体类去实现
abstract class Builder { public Phone phone { get; private set; } virtual public void createPhone() { phone = new Phone(); } virtual public void addCPU() { } virtual public void addMemory() { } virtual public void addScreen() { } virtual public Phone getPhone() { return phone; } }
一个生成苹果手机的ConcreteBuilder
class AppleBuilder : Builder { override public void addCPU() { phone.CPU = "A7"; } override public void addMemory() { phone.Memory = "1GB"; } override public void addScreen() { phone.Screen = "LG 5.5\""; } }
Director负责调用Builder
class Director { public void createPhone(Builder builder) { builder.createPhone(); builder.addCPU(); builder.addMemory(); builder.addScreen(); } }
要生成的产品Phone
class Phone { public string CPU; public string Memory; public string Screen; public override string ToString() { return "CPU:"+CPU+"\nMemory:"+Memory+"\nScreen:"+Screen; } }
执行代码
![](http://images2015.cnblogs.com/blog/751394/201509/751394-20150917103156023-318196186.png)
效果:
1.变更产品,只需定义一个新的ConcreteBuilder
2.Director对产品的构造过程可以精细控制(每个部件创建的先后顺序?还有什么?)
相关文章推荐
- 群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法【附C#群蚁算法完整项目代码】
- VS2010中C#调用C函数
- C# WinForm 解决子窗体放大后,子窗体图标放大的问题
- 设计模式C#实现(六)——单例模式
- C# 01 Hello World
- C#学习笔记(一)
- C#栈的简单介绍及应用
- C#多线程学习(一) 多线程的相关概念(转)
- C# 操作系统回收站
- C#机制
- C#~异步编程再续~async异步方法与同步方法的并行
- LeetCode 10 正则表达式匹配
- c#基于这些,你已经看到了?(一)-----谁才刚刚开始学习使用
- C# 生成CODE128条码
- 关于C#文件复制(递归)
- C#中var关键字
- C#调用耗时函数时显示进度条方式
- C#中出现访问性不一致的解决方法
- ORA-01000:超出打开游标的最大数(C#)
- (转) C#如何使用异步编程