我自訂的設計模式


2016/08/10
這篇提到的做法已經被我捨棄了,物件之間有依賴關係時,使用 std::shared_ptr 處理就已經很理想了。



在開發ToyBox途中,我設計了一個簡單的設計模式,用來解決我擔心的某種資源洩漏狀況。



很多情況下,兩個物件可能在資源上有依賴關係,需要互相保持聯絡,注意對方手上的資源是否還存在,當其中一方被銷毀或者打算切斷關係時,有必要通知對方一聲,讓對方可以處理一下(不要說一直到打了電話才知道這個人已經切斷關係),這可以避免許多記憶體問題,算是一種制式化的觀察者模式,只觀察對方是否打算斷絕聯絡,彼此互相觀察。


實作上就只是互相記住對方的指標,然後準備好一個callback function,上面紀錄當對方斷線時該如何應對,當對方斷線時就會由對方呼叫這個callback function。


實作寫在 ToyBox/include/toy/Link.hpp,大概要用一段時間才知道這作法的優缺點,有可能到頭來我只發現這作法是多此一舉也說不定,如果你對這個模式有什麼更好的建議,歡迎留言或來信告知。


#include <stdio.h> #include "toy/Link.hpp" //當 obj_B 主動絕交時會呼叫這個 obj_A 預先準備的行為 void obj_A_reaction() { printf("goodbye obj_B\n"); } //這範例是 obj_A 先斷交的,所以只有執行這個 void obj_B_reaction() { printf("goodbye obj_A\n"); } int main() { toy::Link obj_A; toy::Link obj_B; obj_A.SetReaction(&obj_A_reaction); obj_B.SetReaction(&obj_B_reaction); obj_A.Connect(obj_B); //兩者連結上了 obj_A.Disconnect(); //由obj_A主動斷交,此時只會呼叫obj_B_reaction() return 0; }

沒有留言:

張貼留言