关于Interface与纯虚函数在设计中的区别
2010-04-15 10:49
176 查看
因为之前一直做C++,没有特别研究过Java、C#中的Interface概念。
在看设计模式的时候,也弄得一知半解的。
今天在做GDE-X过程中,我想定义一个类似于 c++的纯虚函数的,派生类必须实现的函数。然后我发现在C#中,使用abstract(纯虚函数)和Interface(接口)都可以实现这个概念,于是甚感迷惑,请教了一下同事,终于弄懂了设计上的不同概念。
如果光从实现上来说,在C#中纯虚函数和接口实现的功能一样 —— 定义抽象接口,派生类必须实现。
不同的概念是,接口是定义一组方法,它比纯虚函数更加抽象,是对于行为的抽象。
即使没有关系的对象也可能具有同样的行为特性,那么将行为抽象到“接口”这个概念中,在设计上将大大增加灵活性。
如果拘泥于使用基类的纯虚函数,则会增加设计的复杂性,而且使用起来也不灵活。
那么什么情况下使用纯虚函数呢?
自己总结如下:
1. 确定该行为只被自己的派生类使用,不会其他地方有复用的必要。
2. 不构成“一组”行为,没必要单独抽出去,增加系统的复杂度。
所以在设计中如果发现有“一组”纯虚函数,还是单独抽出去构成接口比较好。
在看设计模式的时候,也弄得一知半解的。
今天在做GDE-X过程中,我想定义一个类似于 c++的纯虚函数的,派生类必须实现的函数。然后我发现在C#中,使用abstract(纯虚函数)和Interface(接口)都可以实现这个概念,于是甚感迷惑,请教了一下同事,终于弄懂了设计上的不同概念。
如果光从实现上来说,在C#中纯虚函数和接口实现的功能一样 —— 定义抽象接口,派生类必须实现。
不同的概念是,接口是定义一组方法,它比纯虚函数更加抽象,是对于行为的抽象。
即使没有关系的对象也可能具有同样的行为特性,那么将行为抽象到“接口”这个概念中,在设计上将大大增加灵活性。
如果拘泥于使用基类的纯虚函数,则会增加设计的复杂性,而且使用起来也不灵活。
那么什么情况下使用纯虚函数呢?
自己总结如下:
1. 确定该行为只被自己的派生类使用,不会其他地方有复用的必要。
2. 不构成“一组”行为,没必要单独抽出去,增加系统的复杂度。
所以在设计中如果发现有“一组”纯虚函数,还是单独抽出去构成接口比较好。
相关文章推荐
- Java中abstract和interface的区别 (从设计上理解)
- 常见的关于abstract与interface的区别的笔试题的解析
- 转: 从设计理念层面看abstract class和interface的区别
- 关于面试中abstract 和 interface 的区别
- 关于 abstract 和 interface的区别最经典的解答
- 关于相似设计模式之间的区别
- abstract class和interface的区别 及模板方法设计模式
- Java:关于接口(interface)详解;接口与抽象类的区别
- 关于ArcEngine中的Inbound 和outbound interface区别(转)
- 关于MATLAB入门的简单记录5 程序结构设计与C语言的区别
- (转)关于TCP的一个跨层设计的 具体实现思路 (兼讨论 tcl.eval与Tcl_Eval的区别)
- 关于static静态的、继承、接口interface、final关键字、单例设计模式总结
- 关于IOS中变量声明方式@interface和@property的区别
- 关于领域驱动设计的实体对象与值对象的区别考虑
- 关于submit与异步提交的区别
- 关于Python中*与**的区别与使用
- 关于接口的设计
- php中关于mysqli和mysql区别
- Android关于buildToolVersion与CompileSdkVersion的区别
- 关于S5PV210 设计的Sate210 核心板 测试架/测试架方案探讨(作者:gooogleman)