注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

眼睛想旅行

技术就是我的生命与信仰!

 
 
 

日志

 
 
关于我

精通C,C++,python,Erlang。并熟悉各种其他编程语言,用cocos2dx游戏引擎作过几个项目。会MySQL增删改查,了解OpenGL渲染原理。懂单片机,能设计数字电路系统,会画电路图和设计电路板。喜欢了解最新前沿技术,并持续关注和学习新技术。

网易考拉推荐

C++对象之间通信的三种常见方式  

2014-03-12 10:46:38|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

经过这一年多对C++的使用,总结出了下边的三种常见对象之间的通信方式。这里就不上代码了。只作为一种设计思想,记录下来方便自已以后使用,和大家一起学习,这只是自已在工作中的总结,如果谁有更好的经验,请回复我,我再加进去。

1:使用一个全局单例对象作为交互对象的中介;

在这种交互方式中,有三个对象参加进来。

类1:ClassA;             //用来创建交互对象1:obj1

类2:ClassB;             //用来创建交互对象2:obj2

类3:ClassC;             //单例类,用来创建单例对象:objS

如果obj1现在要给obj2发送一条消息,就要先从objS中取得obj2的对象指针地址。然后通过这个地址把消息发送给obj2。当然,用同样的方法,我们也可以让obj2给Obj1发送消息。

这里使用时要注意的问题有两个。

      1) obj1给obj2发送消息时,objS中存的obj2对象地址不能为空

      2) 当创建obj2时,要马上把obj2的实例地址传送给单例objS,在销毁obj2时,要马上把obj2在单例objS中保存的对象地址清空为NULL

C++对象之间通信的三种常见方法 - ♂苹果 - 眼睛想旅行

 

2:为交互的对象创建一个虚接口代理类;

     这种方式,适合自已常常要给第三方发回调消息的对象,比如按钮或者控件什么的。因为自已包含于目标对象,所以比较方便设置代理,也可以使用目标对象对控件对象对外组合封装起来。

     这种交互方式中,有两个对象参加进来,创建类时,需要创建发消息对象的虚代理类。在而目标对象要继承这个虚代理类并实现这个代理类的虚方法。他和第三种方式相比,优点是可以创建多条消息通道。

类1:ClassA;              //用来创建交互类ClassC,将作为obj1的一个父类

类2:ClassB;              //用来创建发送消息的对象2:obj2

虚接口类:ClassX;    //用来实现交互,在obj2中会包含一个ClassX的实例类型变量。以方便保存obj1的对象地址。

类3: ClassC;               //继承自ClassA和ClassX,用来创建交互对象1:obj1

C++对象之间通信的三种常见方法 - ♂苹果 - 眼睛想旅行

3:创建交互对象的基类方法函数指针。

       这种方式和第二种其实是差不多的,只是这种方式,比较适合只有一条回调消息的情况。这里只有两个对象,和一个对象方法函数指针。这里只强调一下,对象函数指针的定义方式。

       类1:ClassA;                               //用来创建交互对象1:obj1

       类2:ClassB;                                //用来创建交互对象2:obj2

这里说明一下obj1和obj2的方法函数指针都怎么创建:

      假如:

               ClassA有一个对象方法,void func1(); 我们给这个方法定义一个指针类型如下

               typedef  void  (ClassA::*FUNC1)();

        在对象obj2中就可以定义这么一个FUNC1类型的对象指针。定在创建obj1中创建obj2时把obj1的这个FUNC1的指针类型赋上obj1的回调方法指针。这样就可以在obj2中使用使用obj1的这个对象方法指针调用obj2的回调方法了。 请看图:

C++对象之间通信的三种常见方法 - ♂苹果 - 眼睛想旅行

第一种方法最常用容易理解,第二方法速度快,第一种与三种结合适合批量对象交互,可组成MVC或观察着模式。
UML图画的并不标准,正在学习中。

欢迎转载,转载注明出处:http://fengmm521.blog.163.com/blog/static/25091358201421292224959/
另外我有一个QQ群,欢迎爱技术的来一起学习交流:213571088
  评论这张
 
阅读(3775)| 评论(2)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017