[设计模式学习笔记][之四]如何处理变化的需求?
来源:互联网 发布:mac版flash播放器下载 编辑:程序博客网 时间:2024/04/29 18:15
如果我们能够以不变应万变,那么我们是相当的成功了,这是个无法完成的任务。
但如果我们能以最小的代价来应对这变化无穷的需求,那么我们就没有失败... ...
为了解决变化的需求带给我们的困惑,也为了探究到底有没有“功能分解”这外的其他选择,我们还是回到现实生活中看看人们是如何做事的,细心的观察,耐心的体会,会发现一些我们平时没有注意的东西。
假设这样一种情况,您是一名大学讲师,今天听您课程的人都是刚入学第一天的新生,他们在你的课程之后还有其他的课程,但却又不知道下一节课的上课地点。你的职责之一,就是确保每个人都知道到哪里去上下一节课。
面对这样的问题我们该怎么处理呢?如果遵循结构化程序设计的方法,可能会这样做:
1、获得上课人员的名单。
2、对于名单上的每个人:
a.查找他的下一节课程。
b.查找下一节课的上课地点。
c.查找到下一节课的教室的路径。
d.告诉学生怎样去上下一节课。
为了实现上面的过程,我们可能需要:
1、获得课堂上人员名单的方法。
2、获得每个人课程表的方法。
3、一个程序来告诉某个学生如何从现在的教室到另外任何一个教室。
4、一个控制程序来为每个人做需要的步骤。
现实生活中我们真的会这样做吗?如果你是一对一的教学这样当然没有问题,但是如果你面对的是几十上百的学生,等到告诉完每一个学生,可能天都要黑了!实际上,你完全可以把从你的教室到其他教室的路径张贴出来,然后告诉上课的所有学生:“我把其他的课程和相应教室的地址张贴在教室后面了。请按照这份地址表去你们的下一个教室。”我们期望每个人都知道他们的下一节课是什么。这样他们可以在表上查找到他们要去的教室,并根据表上给出的地址自己走到应该去的教室去。
两种方法的不同之处在于?
* 用第一种方法----对每个人都明确地指出路径----你必须密切注意许多细节。除了你之外的任何人对任何事都没有任何责任。就算你是“孺子牛”,也会疯掉的!
* 用第二种方法,你给出一个普通的指令,并期望每个人都能自己知道如何完成你给出的任务。
最大的区别就是责任的转移。在第一种方案中,你对所有的事表负责;而在第二种方案中,学生对他们自己的行为负责。两种方案用于实现同样的东西,但组织方式有着巨大的差异。
为了看到责任重新组织的效果,让我们看看当新的需求出现时会发生什么。
假设我被告知:需要给新生中的班干部特殊的指令。也许他们需要在下课后先到指定地点去领取新书,然后再去上下一节课。在第一种方案中,我们必须修改控制程序来区分班级干部和普通学生,然后再给班级干部下特殊的指令。这样很可能我要对程序做相当多的修改。但是,在第二种方案中,每个学生对自己的行为负责,我只需要为班级干部编写一个附加的程序。控制程序仍然只是说:去你的下一个教室。”第个人都只是相应地按照这条指令去做。
这是控制程序的巨大区别。在第一种方案中,每当出现一种需要按特殊指令行事的新学生时,控制程序都必须被修改。在第二种方案中,新类型的学生必须对自己的行为负责。
三处改变造就了这样的结果。它们是:
* 每个人对自己负责,而不再由控制程序对他们负责。(为实现这一点,第个“人”都必须知道自己是什么类型的“学生”。)
* 控制程序可以与不同类型的人(班干部和普通学生)交流,就好像他们是同一类型的一样。
* 控制程序不需要知道学生在教室之间移动的任何特殊步骤。
为了更好的诠释上面案例中的内容,我们有必要引入一些术语,从更高的层次再次审视我们的案例。
案例中的讲师,是在概念层次上与学生进行交流。换句话说,你告诉学生“你希望他做什么”,而不是“怎么样去做”。但是,他们走到下一个教室的路径各不相同。他们按照各自不同的指定行事,这就是实现层次上的工作了。
在一个层次上(概念层次)上通信而在另一个层次(实现层次)上执行,其结果就是请求者(讲师)不知道具体发生了什么,只知道“概念上”发生了什么。这一点非常重要。这就是责任转移所带来的好处。
待续:下一节,我们将会通过案例,讲述如何将这些概念应用到编程当中去。
- [设计模式学习笔记][之四]如何处理变化的需求?
- 设计模式学习笔记(四):封装变化
- C++设计模式4--桥接模式--处理多维度的需求变化
- [设计模式学习笔记][之三]世上没有一成不变的需求
- 设计模式学习笔记(四)之工厂模式(Factory)
- 设计模式之Builder模式学习笔记(四)
- 阅读笔记常见的设计模式之四:工厂模式
- 设计模式之Singletion的学习笔记
- 设计模式之Builder 的学习笔记
- 设计模式之Prototype的学习笔记
- 设计模式后的设计理念:需求变化,针对接口编程,优先使用聚合
- 设计模式笔记之6原则--为“变化”做好准备
- SDL库的学习笔记之四—事件处理
- 学习笔记之设计模式
- 重读《设计模式》之学习笔记(四)--BRIDGE模式
- 设计模式C++学习笔记之四(Multition多例模式)
- 设计模式C++学习笔记之四(Multition多例模式)
- 设计模式C++学习笔记之四(Multition多例模式)
- 纯虚函数
- 多态性之静态联编
- HTTP协议 VS HTTPS协议
- 多态性之动态联编 虚函数
- blog搬家
- [设计模式学习笔记][之四]如何处理变化的需求?
- 做一个项目结合.net和oracle碰到的问题总结
- eclipse中优秀的插件
- 关于PHP5的书籍
- 这一年半,一本书,一台本本,一个人
- 以终为始2
- 我在google上的几个技术新闻组
- 网页的宣传(收集)
- 收集的一些C++试题