前段时间刚做过了一个小项目——“在线考试测评系统”,整个项目都是在老师指导下完成的。在完成的过程中,困惑很多,为什么老师要定义那么多的类啊?总共都有好几十个了都,看起来真有点吓人啊,而且还定义出了一些“莫名其妙”的接口(如ExamSerivce等接口),为何不干脆直接用类实现,多简单啊……种种疑惑伴随着我做整个项目的始终,终日郁郁寡欢。
项目的大致结构图如下:(此处不作太多解释)本地版
随着项目逐步成型,我也有了感觉,开始一些不可思议,却开始慢慢的变成了理所当然,顺理成章。那么多类的定义原来是为了分离各个业务的实现,从中体现出了面向对象程序设计的思想,“一切皆对象”。最后在完成项目网络版本时,原来只需添加了一个新的类ExamServiceAgentImpl来实现ExamServiceImpl接口,于是基本不用改动其他地方就安然完成了网络版,此时的我似乎明白了为什么要定义这个ExamServiceImpl接口了,原来这是为了后面的开发做准备啊。
网络版的实现结构图(部分):
虽然项目完成了,但是还有些地方似乎感觉不是那么理所当然。最近正在看了“设计模式”,在我看逐步看的过程中,让我对之前的这个项目有了更进一步的理解,不由得感叹道:“原来如此,原来如此……”,好多当初认为的那么不合理、不理解,现在才明白那是理所当然的。因为当初用到了好多设计模式的内容,如:单例模式、工厂方法、抽象工厂方法、装饰器模式等。如:本地版和网络版就是最好的说明,其中ExamServiceImpl接口为此而定义的,这就用到的是“抽象工厂模式”。抽象工厂模式就是为创建一组相关类或相互依赖的对象提供一个接口,而且无须指定它们的具体类。若要实现本地版或网络版时只需在客户端代码中稍微改动,就立即完成了网络版和本地版的切换。啊,看来设计模式真是重要。
对设计模式的学习提出一点个人见解吧。如果你纯粹的拿着一本设计模式的书来按步就班的学习,看完这本书后,你一定会发现你什么也没看懂,就和没看一样(曾有人这么说过)。我要说的是,在看每个模式的时候一点要结合具体的实例来理解掌握它的好处以及所用场所,比如说把一些相关的模式拿到做过的一些项目中重新来看,你会发现你对做过的项目又有了新的认识,这样学习设计模式的效果更好。