接口版本演化引发的思考一
2006-09-03 23:19
218 查看
有一条基本的设计原则是“对接口编程”,什么意思呢?就是首先通过接口定义协定,也就是接口能够对外提供的功能描述,然后通过具体的类实现该接口。下面是个实现举例
1class IA
2class A1 : public IA
7class A2 : public IA
2 IA* a1 = new A1();
a1->OperationA();
delete a1;
IA* a2 = new A1();
a2->OperationA();
delete a2;
如果由于需求的变更导致接口IA必须提供新的服务,这个时候就有两种选择:一种是直接在接口IA中加入该服务,另一种是通过接口IA继承新的接口类型(比如IB),在IB中加入该服务。具体实现如下:
1class IA
2class IB : public IA
2class IA
2{
3public:
4 virtual void OperationA() = 0;
5 virtual void OperationB() {}
6};
这样具体实现类型A如果不需要改变该新服务(OperationB)的默认实现,就不需要提供该服务的实现。
纯虚函数的接口演化方案和提供默认实现的接口演化方案对应c#中的接口和抽象类之间的区别。
有兴趣的朋友可以看看MSDN Library for Visual Studio 2005上对两者的使用描述。
1class IA
2class A1 : public IA
7class A2 : public IA
2 IA* a1 = new A1();
a1->OperationA();
delete a1;
IA* a2 = new A1();
a2->OperationA();
delete a2;
如果由于需求的变更导致接口IA必须提供新的服务,这个时候就有两种选择:一种是直接在接口IA中加入该服务,另一种是通过接口IA继承新的接口类型(比如IB),在IB中加入该服务。具体实现如下:
1class IA
2class IB : public IA
2class IA
2{
3public:
4 virtual void OperationA() = 0;
5 virtual void OperationB() {}
6};
这样具体实现类型A如果不需要改变该新服务(OperationB)的默认实现,就不需要提供该服务的实现。
纯虚函数的接口演化方案和提供默认实现的接口演化方案对应c#中的接口和抽象类之间的区别。
有兴趣的朋友可以看看MSDN Library for Visual Studio 2005上对两者的使用描述。
相关文章推荐
- 接口版本演化引发的思考二
- 关于“JAVA中为什么没有了多继承并出现了接口”这一问题引发的一些思考
- 记录一次JDK版本问题,引发的思考
- 由一道PHP笔试题引发的思考(关于php5的Iterator接口)
- 一个crash引发对版本管理备注重要性的思考
- Mybatis扫描全包(包含Service、Dao的接口)导致抛出BindingException异常,引发的一系列思考(含源码分析)
- 一个JDK版本问题引发的思考--Java环境配置 && Eclipse的JDK配置
- 由java.lang.OutOfMemoryError:java heap space引发的关于JVM优化的思考
- IIS程序池应用于不同net framework版本时引发的问题(Server Application Unavailable)
- @Override jdk版本不一致引发的问题
- 师哥高薪offer引发的思考
- 从map的一个优雅写法的问题引发的思考
- 由指针和引用的区别引发的思考
- 一道面试题引发的对JavaScript类型转换的思考
- jquery版本升级引发的问题和解决方法
- 由一个创建100G的表空间的面试题引发的思考
- 让SpringMVC支持可版本管理的Restful接口
- 七牛云存储官方接口PHP版本
- 由error: `kill' undeclared (first use this function)引发的思考