快乐技术沙龙即将一周岁了,最近它又多了个妹妹叫《嗨皮吧》,春哥(秦春林)还是很给力啊!一连搞两个组织(社团 (∩_∩)),那么还是主要介绍一下妹妹嗨皮吧好啦,说起嗨皮吧还真是有很多吸引人的地方,它有线上和下线两种模式,可以在嗨皮吧的网站上交流,也可以周末了来我们这里放松、聚会、打牌、写代码、蹭网、吃饭等等,嗨皮吧正式启动第一天还是很给力很多好朋友都来捧场,一起吃饭、打牌、玩游戏(XBOX)。对了地址是:北京市海淀区西二旗领秀新硅谷A区4楼402室,欢迎大家周末来一起交流!废话不多说啦。。。。。

1、应用场景

开始今天的主题吧,今天的主题是建造者模式,按惯例还是以一个真实的场景来模拟的去描述,还是嗨皮吧(http://happy-bar.com/),嗨皮吧线上活动有一个分享技术的版块,会根据大家感兴趣的技术方向找一些该技术方向的高手、老手来录制视频与大家分享,比如:秦春林擅长:WP7、cocos2d-xna,蛋子(张智)擅长:ASP.NET、Oracle!那么这个时候嗨皮吧线上版块的嗨客们对最近的WP7版本的游戏引擎cocos2d-xna很感兴趣,我们就会找秦春林(COCOS2D核心开发人员)来为我们录制一套关于COCOS2D在WP7手机上游戏开发的视频。好吧,有代码模拟一下吧!

首先,需要有秦春林这个类我们这里叫:MrQin,有了MrQin这个类就相当于他已经到我们这里准备录制节目了,按秦春林录制节目的习惯,他喜欢:

第一步:给大家先演示下今天讲解内容的效果。方法名:DemonstrationEfect()

第二步:根据事先准备好的PPT讲解原理。方法名:Principle()

第三步:打开工程分析实现功能的代码。方法名:AnalysisOfCode()

那么秦春林录制视频的C#代码实现如下:

  1. /// <summary>
  2. /// 秦春林
  3. /// </summary>
  4. public class MrQin
  5. {
  6. /// <summary>
  7. /// 演示效果
  8. /// </summary>
  9. public void DemonstrationEfect()
  10. {
  11. Console.WriteLine("演示WP7-COCOS2D,游戏效果!");
  12. }
  13. /// <summary>
  14. /// PPT原理讲解
  15. /// </summary>
  16. public void Principle()
  17. {
  18. Console.WriteLine("PPT讲解实现原理");
  19. }
  20. /// <summary>
  21. /// 分析代码
  22. /// </summary>
  23. public void AnalysisOfCode()
  24. {
  25. Console.WriteLine("根据原理分析代码");
  26. }
  27. }
视频录制完成后发现还有很多嗨客对ASP.NET + Oracle的WEB项目方面的知识,我们就会找擅长这方面的程序员蛋子(张智)来为大家录制一段关于这个技术的视频,那么我们还是需要一个类就是张智类,定名为:MrZhang吧,MrZhang录制视频喜欢的流程是:

第一步(与MrQin一样):给大家先演示下今天讲解内容的效果。方法名:DemonstrationEfect()

第二步:现场代码实现。方法名:Coding()

第三步:分析与回顾关键点。AnalysisOfKeyPoints()

代码实现如下:

  1. /// <summary>
  2. /// 程序员蛋子张智
  3. /// </summary>
  4. public class MrZhang
  5. {
  6. /// <summary>
  7. /// 演示效果
  8. /// </summary>
  9. public void DemonstrationEfect()
  10. {
  11. Console.WriteLine("演示ASP.NET+Oracle Web项目效果!");
  12. }
  13. /// <summary>
  14. /// 代码实现
  15. /// </summary>
  16. public void Coding()
  17. {
  18. Console.WriteLine("边代码实现边讲解原理!");
  19. }
  20. /// <summary>
  21. /// 分析与回顾关键点
  22. /// </summary>
  23. public void AnalysisOfKeyPoints()
  24. {
  25. Console.WriteLine("分析代码实现中的关键技术点");
  26. }
  27. }
这个时候我们嗨皮吧遇到一个问题,就是每个人的讲解方式都有优点,我们需要把每个人讲解过程的优点都提取出来融合成一个固定的规范流程,最后我们决定以后所有嗨皮吧的视频都暂时以一种风格来录制.

第一步:给大家先演示下今天讲解内容的效果。

第二步:PPT给大家讲解必须的基础知识与原理

第三部:代码实现内容。

第四部:关键点分析。

那我们如何改造我们上边的代码呢?既然我们可以吧一个通用的流程分析出来,将来不管录制的是WP7的还是ASP.NET还是WCF等,我们都可以以这个流程来录制,那么这里就体现出一种模式的优势啦,什么模式? 答:建造者模式。

2、建造者模式

建造者模式:将一个复杂对象的构建与他的表示分离,是的同样的构建过程可以创建不同的表示。

        建造者模式类图如下:

         指挥者(Dicrector)类:用来包含一个Builder的抽象类,用来表示使用哪个具体的建造者类。

抽象建造者(Builder)类:用来抽象product类构建的流程。

具体的建造者(ConcreteBuilder)类:用来实现具体建造产品的细节。

产品(Product)类:用来承载建造好产品的细节。

        以我们上边的场景来看,录制视频的步骤就是构建过程,我们的视频就是表示(产品Product),嗨客们和嗨皮吧就是指挥者啦,具体来录制视频的高手们就是我们的具体建造者啦!

上边场景我们已经将嗨皮吧录制视频的统一步骤抽象了出来,那么我们就先把这个抽象的步骤类实现吧,也就是建造者模式中的抽象建造者(Builder)类

代码如下:

  1. /// <summary>
  2. /// 抽象建造这类
  3. /// </summary>
  4. public abstract class VidioBuilder
  5. {
  6. //定义我们之前抽象好的四个步骤
  7. //第一步:给大家先演示下今天讲解内容的效果。
  8. //第二步:PPT给大家讲解必须的基础知识与原理。
  9. //第三步:代码实现内容。
  10. //第四步:关键点分析。
  11. //第一步
  12. public abstract void DemonstrationEfect();
  13. //第二步
  14. public abstract void Principle();
  15. //第三步
  16. public abstract void Coding();
  17. //第四步
  18. public abstract void AnalysisOfKeyPoints();
  19. //获得视频
  20. public abstract VidioProduct GetVidio();
  21. }

抽象好了通用的流程当然接下来就可以实现具体根据流程来录制视频的高手们啦,说要录制视频当然少补了视频这个类了。代码如下:

  1. /// <summary>
  2. /// 视频类
  3. /// </summary>
  4. public class VidioProduct
  5. {
  6. List<string> list = new List<string>();
  7. /// <summary>
  8. /// 添加内容
  9. /// </summary>
  10. /// <param name="content"></param>
  11. public void AddVidioContent(string content)
  12. {
  13. list.Add(content);
  14. }
  15. /// <summary>
  16. /// 播放视频
  17. /// </summary>
  18. public void PlayVidio()
  19. {
  20. Console.WriteLine("视频内容为:");
  21. foreach (string str in list)
  22. {
  23. Console.WriteLine(str);
  24. }
  25. }
  26. }
有了视频类,我们就可以找高手来录制视频啦,有请WP7、cocos2d高手秦春林与ASP.NET、Oracle高手张智登场啦。代码如下:
  1. /// <summary>
  2. /// 秦春林
  3. /// </summary>
  4. public class MrQin : VidioBuilder
  5. {
  6. VidioProduct vidio = new VidioProduct();
  7. /// <summary>
  8. /// 演示效果
  9. /// </summary>
  10. public override void DemonstrationEfect()
  11. {
  12. vidio.AddVidioContent("演示WP7-COCOS2D,游戏效果!");
  13. }
  14. /// <summary>
  15. /// PPT原理讲解
  16. /// </summary>
  17. public override void Principle()
  18. {
  19. vidio.AddVidioContent("PPT讲解实现原理");
  20. }
  21. /// <summary>
  22. /// 代码实现
  23. /// </summary>
  24. public override void Coding()
  25. {
  26. vidio.AddVidioContent("边代码实现边讲解原理!");
  27. }
  28. /// <summary>
  29. /// 分析与回顾关键点
  30. /// </summary>
  31. public override void AnalysisOfKeyPoints()
  32. {
  33. vidio.AddVidioContent("分析代码实现中的关键技术点");
  34. }
  35. /// <summary>
  36. /// 获得录制好的视频
  37. /// </summary>
  38. /// <returns></returns>
  39. public override VidioProduct GetVidio()
  40. {
  41. return vidio;
  42. }
  43. }
  44. /// <summary>
  45. /// 程序员蛋子张智
  46. /// </summary>
  47. public class MrZhang : VidioBuilder
  48. {
  49. VidioProduct vidio = new VidioProduct();
  50. /// <summary>
  51. /// 演示效果
  52. /// </summary>
  53. public override void DemonstrationEfect()
  54. {
  55. vidio.AddVidioContent("演示ASP.NET+Oracle Web项目效果!");
  56. }
  57. /// <summary>
  58. /// PPT原理讲解
  59. /// </summary>
  60. public override void Principle()
  61. {
  62. vidio.AddVidioContent("PPT讲解实现原理");
  63. }
  64. /// <summary>
  65. /// 代码实现
  66. /// </summary>
  67. public override void Coding()
  68. {
  69. vidio.AddVidioContent("边代码实现边讲解原理!");
  70. }
  71. /// <summary>
  72. /// 分析与回顾关键点
  73. /// </summary>
  74. public override void AnalysisOfKeyPoints()
  75. {
  76. vidio.AddVidioContent("分析代码实现中的关键技术点");
  77. }
  78. /// <summary>
  79. /// 获得录制好的视频
  80. /// </summary>
  81. /// <returns></returns>
  82. public override VidioProduct GetVidio()
  83. {
  84. return vidio;
  85. }
  86. }

可见我们邀请的两位高手都按照我们统一录制视频的顺序录制视频啦,那么是谁邀请我们的高手呢?当然我们还有一个指挥者啦,指挥者就是我们的嗨客们与嗨皮吧啦,我们来提出需要视频的类型,代码如下:

  1. /// <summary>
  2. /// 嗨客指挥者
  3. /// </summary>
  4. public class HappyDirector
  5. {
  6. public void BuildingVidio(VidioBuilder builder)
  7. {
  8. //第一步
  9. builder.DemonstrationEfect();
  10. //第二步
  11. builder.Principle();
  12. //第三步
  13. builder.Coding();
  14. //第四步
  15. builder.AnalysisOfKeyPoints();
  16. }
  17. }
OK,完事具备,看看Main函数如何调用吧,代码如下:
  1. static void Main(string[] args)
  2. {
  3. HappyDirector director = new HappyDirector();
  4. VidioBuilder mrQin = new MrQin();
  5. VidioBuilder mrZhang = new MrZhang();
  6. //首先让秦春林录制WP7 cocos2d游戏开发视频
  7. director.BuildingVidio(mrQin);
  8. VidioProduct v1 = mrQin.GetVidio();
  9. v1.PlayVidio();
  10. //接下来让张智录制 asp.net oracle项目实战视频
  11. director.BuildingVidio(mrZhang);
  12. VidioProduct v2 = mrZhang.GetVidio();
  13. v2.PlayVidio();
  14. }
                运行结果如下:
    

那么建造者模式就已经完成了,顺便再说一下,5月份快乐技术沙龙一周岁将举办一次大活动噢,有抽奖环节,欢迎在北京的嗨客们来体验WP7与WINDOW8的技术交流。

转载于:https://blog.51cto.com/wangboyang/796017

设计模式系列-建造者模式相关推荐

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

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

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

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

  3. 建造者模式java_java设计模式3——建造者模式

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

  4. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

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

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

  6. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

  7. 建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例

    本文实例讲述了PHP设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式: 将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1). 来点我人类能听懂的话: 1.在客户端看来需 ...

  8. 学习《图说设计模式》建造者模式

    图说设计模式之建造者模式 1. 模式动机 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.方向盘.发送机等各种部件.而对于大多数用户而言,无须知道这 ...

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

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简述 在程序设计中,我们会经常遇到一些复杂的对象,其中有很多成员属性,甚至嵌套着多个复杂的对象 ...

最新文章

  1. mysql怎么加全局锁_MySQL锁机制/管理(并发锁,行锁,表锁,预加锁,全局锁等等)
  2. windows 下使用 Filezilla server 搭建 ftp 服务器
  3. 想拿下互联网大厂OFFER,都需要准备什么?
  4. 高级数据结构与算法 | 哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶
  5. Java LocalDate类| 带示例的getEra()方法
  6. 数据与计算机通信复习重点
  7. Atitit.执行cli cmd的原理与调试
  8. 【译】图上的深度学习综述 五、图自编码器
  9. VMware虚拟网络设置(NAT模式,桥接模式,仅主机模式设置),再也不用担心虚拟机连不上网了。
  10. python需要下载哪些软件-Python 从不懂到入门
  11. C语言跨平台游戏开发
  12. Xshell使用教程——问答方式
  13. input输入框历史记录清除
  14. linux7找回删除的文件,centos7 rm -rf 删除文件的找回
  15. Unity 3D安装教程
  16. FastAdmin多表联查
  17. CHM文件制作方法及制作中遇到的坑
  18. 计算机考试金麦圈编号教程,计算机二级:数据处理.docx
  19. Bootstrap导航栏示例
  20. Cisco Packet Tracer的简单使用

热门文章

  1. Mybatis集成二级缓存与同时使用缓存与事务存在的坑
  2. 用nginx搭建基于rtmp或者http的flv、mp4流媒体服务器
  3. 关键基础设施是否会成为DDoS攻击的新目标?答案是不大会
  4. 37 windows_37_Thread_InterLock 线程-原子锁
  5. [Hibernate]在VS2010中应用NHibernate 3.2与MySQL
  6. JS实现HashMap
  7. (原)vs2013编译boost1.60库
  8. linux 远程禁用root
  9. 【Extjs】 checkboxmodel 中事件处理
  10. android开发 BaseAdapter中getView()里的3个参数是什么意思