软件接口与扩展性

        如今,接口这个名词已经成为软件架构师乃至程序员们三句话不离口的词汇了,成为了时尚的代表,不说接口,就感觉自己档次很低一样。同样,接口一词也被人们用滥了,其范围也是越扩越大,边界也越来越模糊。其实,对C系语言来说,接口无非有两种,一种是数据接口,举个例子来说,一个对外公布的数据结构。另外一种是功能接口,尤其对C++语言来说,它就是一个纯虚类。我们今天讨论的是后一种接口。

        接口是纯虚类,它定义了一组纯虚函数,任何想要和这个接口对接口的类都要从这个纯虚类继承,并且实现这一组纯虚函数。举一个很简单的例子,写一个动物园模拟程序,每天,动物园都很热闹,有很多动物在进行各种各样的活动,如进食、鸣叫、来回移动等。如果我在定义每一种动物时,把这些活动都实现一遍,没有什么所谓的纯虚类。那么这些动物也就固定死了,动物园管理类,也就是管理这些动物类的总类,也就固定死了,每天就循环地调用这些动物的活动函数就完事了。可以说这个动物园模拟程序写得非常一般,没有什么扩展性,一旦哪天,要模拟一个新的动物,不但要编写新的动物类,编写新的动物活动函数,而且还要把动物管理类再添加上一些功能代码,用来调用新动物的活动函数,最后,再把新动物类和改动后的动物管理类重新编译一遍。

        如果要以接口的形式定义这些动物们都存在的活动,那么扩展起来就容易多了,定义一个纯虚类IAction,其中有几个纯虚函数,Eat、Call、Move等等。然后,每种已有的动物都从这个IAction继承,并实现这几种纯虚函数,动物管理类就循环调用每种动物的这几个虚函数就OK了。这回,再来新的动物就不用重新编译动物管理类,因为新的动物也必须从IAction继承,也要实现这几个函数,规定好新的动物都编成动态库,开放一个对外函数,创建IAction类型,放到某个文件夹里,动物管理类就从这个文件夹里加载,然后调用创建IAction类型的函数,然后调用这个类型的那几个函数,齐活!这样再添加多少个新动物,原来的程序都不用重编了,这个程序就有了扩展性,就可以适应很多新的需求。这样考虑问题,你无论嘴上说与不说接口这两个字,档次都不会太低。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年9月27日
下一篇 2016年9月27日

相关推荐