菜鸟提问,望各位大虾指点
请帮我分析以下程序段: 在一本软件工程方面的书上见的, 不明白
class TimedDoor : public door
{
public :
virtual void DoorTimeout(int timeOutId);
}
Class DoorTimerAdapter : public TimerClient
{
public :
DoorTimerAdapter(TimerDoor& theDoor): itsTimedDoor( theDoor) //这里晕
{}
virtual void TimeOut (int timeOutId)
{ itsTimedDoor.DoorTimeOUt(timeOutId);} //这里也晕
private TimedDoor& itsTimedDoor;
}
这段程序是关于对象接口分离的一个例子
问题点数:20、回复次数:3Top
1 楼cuike519(I will be back!)回复于 2004-08-07 16:57:41 得分 10
这个应该是一个使door定义的接口和TimerClient定义的接口可以协同工作的例子。应该是一种典型的对象适配器委托的例子,为了使TimerClient具有TimeDoor的特性使用了一个适配器,来适配TimerClient和TimeDoor之间的接口。该适配器的最终结果是将TimeOut方法的调用委托给了TimeDoor的方法DoorTimeout。
我是这样认为的。Top
2 楼mydelphiworld(太极圣僧)回复于 2004-08-19 21:09:05 得分 3
同意楼上的关点Top
3 楼redguardtoo()回复于 2004-08-19 22:14:32 得分 7
虚函数理解的话,这个问题很简单的。
建议从C的回调函数看起。例如C标准库中的qsort的接口。
就是有个timeddoor的对象,这个对象只有一个接口(接口在这里可以理解为可以运行时改变的函数指针),本来直接使用timeddoor就可以了。但是timeddoor的用户可能比较别扭,timedoor要被他使用还需要有一些提供额外的接口。
由于timedoor可能不能修改(例如只有二进制库,没有源代码),就在当中增加一个中介。
中介的方法用委托(就是例子中的代码),灵活性强一点(例如能够控制初始化时序)。继承也可以。Top




