于是一直想着要进行重构。刚好国庆几天回家有空,就先进行了大略的改写,开始的思路是把文件管理的部分归到一个独立的类PicManager中,作为ImageViewer类的一个成员,这样可以维持ImageViewer的接口不变,通过简单的Adapter模式调用PicManager的功能。修改起来也很简单,很快就完成了。
但后来一想这样还是要多维护一些代码,而且也不是很干净,于是再次进行重构。这次把ImageViewer作为基类,就只是简单的图片显示功能,每次调用它的loadImage(Qimage&)函数传进一个图像,它就会显示出来,缩放、翻转等功能也都还是封装在里面,但没有了任何文件相关的功能,彻底干净下来了。PicManager类则公开继承ImageViewer,负责管理文件,实现文件切换等,同时如果有动态图片则定时刷新。这样接口还是原来那样,除了这两个类别的几乎不用改,但却使得功能清晰下来了,代码也容易阅读了许多。
另外为了更好地封装不同图片格式的区别,我引入了一个新的类ImageCache,里面记录了图片的一些信息。每次PicManager读取图片实际就是获得一个ImageCache对象,然后提取其QImage成员,调用ImageViewer类的接口显示。这个类的引入也使得下一个将要实现的功能——图片预读取——的实现变得容易了。
总而言之,这次重构把原来的ImageViewer类功能进行了合理的区分,代码也整洁了许多。下一步还要继续重构MainWindow类,让整个程序更简单,更合理。
体验新版Ez看图可以:点击这里。
文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
- 原文出处:三生石的博客