`
rcfalcon
  • 浏览: 221071 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Interface与纯虚函数在设计中的区别

 
阅读更多

因为之前一直做C++,没有特别研究过Java、C#中的Interface概念。

在看设计模式的时候,也弄得一知半解的。

今天在做GDE-X过程中,我想定义一个类似于 c++的纯虚函数的,派生类必须实现的函数。然后我发现在C#中,使用abstract(纯虚函数)和Interface(接口)都可以实现这个概念,于是甚感迷惑,请教了一下同事,终于弄懂了设计上的不同概念。

如果光从实现上来说,在C#中纯虚函数和接口实现的功能一样 —— 定义抽象接口,派生类必须实现。

不同的概念是,接口是定义一组方法,它比纯虚函数更加抽象,是对于行为的抽象。

即使没有关系的对象也可能具有同样的行为特性,那么将行为抽象到“接口”这个概念中,在设计上将大大增加灵活性。

如果拘泥于使用基类的纯虚函数,则会增加设计的复杂性,而且使用起来也不灵活。

那么什么情况下使用纯虚函数呢?

自己总结如下:

1. 确定该行为只被自己的派生类使用,不会其他地方有复用的必要。

2. 不构成“一组”行为,没必要单独抽出去,增加系统的复杂度。

所以在设计中如果发现有“一组”纯虚函数,还是单独抽出去构成接口比较好。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics