模式名称:单实例类(Singleton)
问 题:只有唯一实例的类即为“单实例类”。对象需要全局可见性和单点访问。
解决办法:对类定义静态方法用以返回单实例。
模式名称:观察者(Observer)(发布—订阅(Publish-Subscribe))
问 题:不同类型的订阅者对象关注于发布者对象的状态变化或事件,并且想要在发布者产生事件时以自己独特的方式做出反应。此外,发布者想要保持与订阅者的低耦合。如何对此进行设计呢?
解决方案:定义“订阅者”或“监听器”接口。订阅者实现此接口。发布者可以动态注册关注某时间的订阅者,并且在时间发生时通知它们。
2 案例概述与可行性研究
2.1问题定义
建造一个简单的电子式微波炉系统,该系统只有一种用户:用微波炉烹饪食物的人。虽然厂商打算把简单,低价的微波炉投放市场。但同时,厂商应该设计具有可扩展性的结构,以使得以后可以研制更加复杂,功能更多的微波炉产品。
2.2一般性描述
这个要建造的系统是一个简单的微波炉。这个微波炉有两个按钮和一个旋钮:烹饪按钮、取消按钮和时间设定按钮。并且该微波炉有一个显示器以显示微波炉的运行状态。
下面是一些初始系统的特定需求:
1.这个微波炉模拟应用程序将包含一个允许用户设定微波炉烹调时间的小旋钮,相应的烹调时间也应显示给用户。
2.如果微波炉门关着,那么用户可以通过小键盘输入加热时间。并且应将加热时间显示给用户。
3.一旦输入某个时间,用户便可以通过点击Start Button来启动整个烹调过程(即接通功率管)。在烹调过程中,除Stop Button外,其他按钮均失效。
4.在烹调过程中,按下一次Stop Button,微波炉进入暂停加热状态,但剩余加热时间仍保留。按下两次Stop Button,微波炉结束烹调,计时器清零。
5.在炉门打开的时候,按按钮无效。
6.在微波炉内有灯。
7.在任何烹饪的时候,必须打开灯(以便用户从炉门的窗口中观察食物的烹调状况)。
8.在炉门打开的任何时候,必须打开灯以便用户可以看到食物或者有足够的亮光以打扫微波炉)。
9.用户可以通过打开炉门来停止加热,此时计时器暂停计时,进入暂停状态。
10.如用户在加热途中打开炉门,要继续进行余下的加热,只需关上炉门即可继续启动烹调过程。也可在关上炉门后追加加热时间。
11.如果用户关上炉门,灯就熄灭了。
12.如果烹调时间到了(加热到预设时间),微波炉就关上功率管和灯。同时发出警告鸣叫声告诉用户食物已经好了。
2.3案例的开发工具与开发技术简介
开发平台:Microsoft Visual Studio 2005
UML建模工具:Visual Paradigm for UML 7.0 Personal Edition
开发语言:C#,UML
开发技术:基于统一过程的敏捷方法迭代开发模式
2.4案例可行性解决方案分析
2.4.1解决方案1:设计控制器类
图2-1 解决方案一的对象依赖图
本方案有很高的可复用性和很低的耦合度。然而该方案仅使用了封装原则,从而使得这个方案像过程性编程:在Oven逻辑中捕获所有的(领域和应用)语义。这种方法的主要弱点是提出了一个包含所有业务逻辑的“GOD“对象。这样基本上就涉及到了有关传统的过程性程序的所有问题,其结果是,在管理复杂性上,该方案所做的并不比过程性编程好。
2.4.2解决方案2:具有高度耦合的责任分配模式
图2-2 解决方案2的对象依赖图
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>