回想一下你编写过的所有程序。其中许多可能具有如下的基本循环结构。
首先进行初始化应用程序。接着进入主循环完成需要做的工作,这些工作或许是处理GUI事件,或许是处理数据库记录。最后,一旦完成了工作,程序就推出主循环,并且在程序中之前做清除工作。
这种结构非常常见,所以可以把它封装在一个名为Application的类中。之后我们就可以在每个想要编写的新程序中重用这个类。想想!我们再也不需要去编写这个循环了。
例如我们看到了这种标准程序的所有组成部分,其中初始化TextReader和TextWriter,并且有一个主循环从Console.In中读取华氏温度,并把该温度转换成摄氏温度打印出来。最后打印出一条退出信息。
这个程序完全符合主循环结构,它先做一些初始化,接着主循环中完成要做的工作,最后做一些清理工作并退出。
我们可以应用Template Method模式把这个基本结构从ftoc程序中分离出来。该模式把所有通用代码放入一个抽象基类的实现方法中。这个实现方法完成了通用算法,但是将所有的实现细节都交付给该基类的抽象方法。
这样,例如我们可以把这个主循环结构封装在一个名为Application的抽象基类中。代码如下
该类描绘了一个通用的主循环应用程序。从实现的Run函数中,可以看到主循环。也可以看到所有的工作都被交付给抽象方法Init、Idle以及CleanUp。Init方法处理任何所需的初始化工作;Idle方法处理程序的主要工作,并且在调用setDone方法之前被重复调用;CleanUp方法处理程序退出前所需的所有清理工作。
我们可以通过继承Application来改写ftoc类,只需要实现Application中的抽象方法即可。例如代码如下: