1. 程式人生 > >C++物件之間通訊的三種常見方式

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