软件开发的家园,编程爱好者的天地.

现在是:北京时间 2016/4/14 上午11:50:51 星期四

设为首页  |  加入收藏  |  网站地图

烧水器事件簿 [Design, C#]
发布于:第八基地 来源:互联网 作者:天堂路上 时间:2011-10-12 点击:351

0.目录

1.烧水器事件2.关于PROTON3.BOILER4.ENROLLEE5.ENROLLEEQUEUE6.ENROLLEEMANAGER7.关于设计

 

1.烧水器事件

Paul是某公司某部门的员工,该部门的员工都是入住员工宿舍的。员工宿舍提供开水的地方和他们所住的地方相隔较远,于是他们凑钱买了个烧水器,但最近这个烧水器坏了。Paul打算动员大家再凑钱买一个新的,可大家爱理不理、得过且过的,搞到这几天大家都在楼下的小卖部买矿泉水喝。Paul和同宿舍的几个人商量了,打算就这几个人凑钱买一个烧水器,但东西买回来后,其他人肯定会趁机拿来用,不让其他人用是不可能的,于是,Paul他们打算出台一些规定来维护“股东”们的权益。

以下是他们即将出台的使用烧水器的排队规则:

1)Paul、Henry、Chris和MC四个人凑钱买了这个新的烧水器,他们是“股东”;2)当原队列只有“股东”时,后加入的“股东”将排在队列末尾,而后加入的“非股东”也将排在队列末尾;3)当原队列只有“非股东”并且第一个“非股东”正在使用烧水器烧水时,后加入的“股东”将插入正在使用烧水器的“非股东”后面、第一个正在等候烧水器的“非股东”前面,而后加入的“非股东”将排在队列末尾;4)当原队列既有“股东”又有“非股东”时,后加入的“股东”将会插在队列中最后一个“股东”后面、第一个正在等候烧水器的“非股东”前面。

规则里面的条款明显体现了“股东”们的优先使用权。由于大家都有自己的电脑,于是Paul他们打算开发一个小型系统管理队列。透过这个系统,大家都能看到队列当前的状况。当上一个员工用完烧水器后,系统会通知下一个正在等候的员工。

 

2.关于PROTON

Proton是Paul他们四个打算开发的用于管理队列的小型系统的开发代号。Proton包括以下几个核心类:

1)BOILER:从管理学的角度来看,可供分配和使用的资源永远是稀缺的、不足的,也正因为这种稀缺和不足,人们才需要通过管理务求使得这些资源能够发挥最大的效益。然而,资源使用后所发挥的效益的获益者是有偏向性的。在这起烧水器事件中,烧水器就是这一稀缺的资源,而它的使用效益是应该偏向于集资的“股东”们。Boiler就代表了这个烧水器。2)ENROLLEE:Enrollee代表着与烧水器事件有关的员工,包括“股东”和“非股东”。Proton的存在意味着资源的收益的分配是不平均的,于是Enrollee的设计必须能够体现出“股东”和“非股东”的区别。3)ENROLLEEQUEUE:为了维护“股东”们的权益,Paul他们订立了一系列的排队规则。EnrolleeQueue是一个集合类,提供了必要的接口用于队列操作,它的内部逻辑必须体现出Paul他们订立的排队规则。4)ENROLLEEMANAGER:EnrolleeManager是Proton的后方逻辑负责人,它负责要使用烧水器(Boiler)的员工(Enrollee)的注册和注销、使用排队规则(EnrolleeQueue)来管理等候队列、处理烧水器(Boiler)的分配等。

本文将只讨论Proton的后方逻辑的设计与实现,并且重点放在上面所提到的4个核心类中。

 

3.BOILER

3.1开始烧水...

一个普通的烧水器,无论是用煤气还是用电的,都必定具备烧水的功能,否则就只能当作装饰品了。当你打开煤气炉或者通电后,烧水器就会正式开始烧水了。这里,Enrollee是通过Boiler的Boil方法让烧水器开始工作。

现实中的烧水器不会知道更不会记录自己所在的位置,但因为Proton在通知下一个使用者的时候必须告诉他到什么地方拿烧水器,于是我为烧水器加入一个Location属性指示其当前所在之处。

于是,Boiler.Boil方法和Boiler.Location属性的代码可以这样写:

// Code #01private string m_Location;public string Location
上一篇:没有了
对我有帮助
(0)
0%
对我没帮助
(0)
0%
返回顶部
在线反馈
在线反馈