第三重境界:代理接口DLL
看到这个名字,可能大家有点迷糊:代理?接口?DLL?三个风马牛不相及的东东扯到一块是什么意思呢?
其实只要按照字面意思就能够大概理解:
代理:就是设计模式中的代理模式;
接口:就是Java中的Interface一个概念;
DLL:就是动态链接库了:)
翻译成一句完整的话就是:DLL通过代理模式对外提供接口。
下面我们看看这个“代理接口DLL”是如何实现的。
/*******************************DLL代码*********************************/
//声明部分
class __decspec(dllexport) InterfaceClass{ //声明接口类
class RealizeClass; //引入实现类
RealizeClass* m_pRealizeClass; //指向实现类的指针,咦,怎么会有数据?
public:
void Function1(int param1, char param2 );
void Function2(int param1;
void Function3(bool param1, char param2 );
……………………………………………….
}
//实现部分
InterfaceClass::InterfaceClass(){
m_pRealizeClass = new RealizeClass();
}
InterfaceClass:: Function1(int param1, char param2 ){
return m_pRealizeClass-> Function1(param1, param2 );
}
//其它函数略。
/*******************************DLL代码*********************************/
/***************************使用DLL的客户端代码********************/
InterfaceClass pInterfaceClass = new InterfaceClass();
pInterfaceClass->Function1(param1, param2);
/***************************使用DLL的客户端代码********************/
各位看完上面的样例,基本上应该都能够明白是如何实现的,但可能会问“为什么还是有一个指针数据类型呢”?不是说没成员数据的吗?
是的,这里关键就在于这个指针,虽然有这个成员数据,但是大家想一想,指针是一个固定大小的类型,而且客户端程序是看不到这个指针的。因此不管对于以下哪个变化,InterfaceClass的结构都不变化,客户端的代码也不受任何影响,不需要重新编译。
1) 具体实现的RealizeClass增加、修改、删除成员数据;
2) RealizeClass有一天改了名称变成了RealizeClassSE;
3) RealizeClass的Function1函数改名了,甚至加了一个缺省参数了。
讲了半天,基本上把“代理接口DLL”是一个什么东东、如何实现讲完了,但是最根本的问题还没有回答——这重境界要解决什么问题?
其实看完如何实现后,聪明的你基本上都能猜出要解决什么问题了,当然就是第二重境界遗留的两个问题了:
1) 修改类定义:例如增加一个成员变量。
2) 修改函数定义:例如增加一个函数参数,修改某个入参类型;
代理接口DLL通过代理模式(其实本质上就是一个指针)解决了上述两个问题,把对外呈现和内部实现分别由不同的类实现,然后通过一个简单的指针将两个类连接起来。
========未完待续,后面更精彩===========
分享到:
相关推荐
数据描述符(descriptor)和存取描述符均具有以下可选键值:当且仅当该属性的 conBgurable 为 true 时,该属性描述符才能够被改变,同时该属
不要再重复造轮子了,Hutool这款开源工具类库贼好使(csdn)————程序
———————————————— 版权声明:本文为CSDN博主「jbyyy、」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:...
————————————————————- 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:Pycharm ————————————————————- 分析 接口是基于HTTP协议的,那么说白了,就是发起HTTP请求就...
很多时候,都听人家在说不要重复制造轮子,要站在巨人的肩膀上等....不过让我感到有点困惑的是,怎么样才叫做不要重复制造轮子?如何才能站在巨人的肩旁上?现在网络如此发达,资源如此丰富,开源社区也发展的很好。...
重新发明轮子这些是我遇到的一系列面试问题的集合,我被要求重新发明轮子。
自己造轮子:一款实用的Android广告栏实现过程2016-01-23 安卓应用频道 安卓应用频道(点击上方公众号,可快速关注)来源:dongjunkun链接:
小班科学——轮子.doc
在根据SGI-STL仿造轮在的过程中,学习c++和数据结构
每家PLC厂商都有自己的通讯协议,三菱有MC、倍福有ADS,然而没有统一性的接口协议。 为适应每一家通讯,每一家设备商、MES和工厂等都需要针对每款产品开发相应的通讯接口。 OneConnectAPI为实现统一的接口,去适配...
决不重新发明轮子.docx
幼儿园大班教案——轮子变变变.pdf
通过这个程序,你可以轻松地与讯飞星火API建立连接,并实现与模型的交互。无论是简单的问答还是复杂的问题,它都能准确理解并给出满意的答案。而且,它还具备联系上下文的能力,能够更好地理解问题的语境,从而提供...
小班主题活动设计思路了——不起的轮子.docx
52020——收藏资料.4需要几个轮子0.ppt
NULL 博文链接:https://changzhiwin.iteye.com/blog/505946
NULL 博文链接:https://basil1292.iteye.com/blog/459911
3jdk并发包 3.1多线程的团队协作:同步控制 3.2线程复用:线程池 3.3不要重复发明轮子:jdk的并发容器 3.4使用jmh进行性能测试 3.2线程复用:线程池 3.3不要重复发明轮子:JDK的并发容器 3.4使用JMH进行性能测试 ...
如何避免产品设计中的「生造方案」和「重新发明轮子」? .doc