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

经过这一年多对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
  • 10
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值