我有一個DLL導出一些函數用於獲取或設置一些底層數據對象中的各種值。在某些情況下,DLL會通過註冊的回調函數指針嚮應用程序發出通知。然後,應用程序應該通過DLL接口中的特定功能來響應通知(儘管不是很快)。在收到響應之前,DLL中的數據對象可能會被讀取但不能寫入。有狀態的DLL是狀態模式的良好候選者嗎?
該DLL必須全局導出所有的方法。但是如果通知被提出,所有的設置功能都是禁止的。
關閉我的頭頂我可以想到兩個解決方案:我可以實現一個簡單的基於標誌的狀態機制,並將每個setter包裝在if語句中檢查此標誌。或者我可以按照國家模式實施這兩個國家。
第一個解決方案應該便宜,但要求所有開發人員記得在實現新導出的setter函數時檢查該標誌。如果在某一時刻只讀狀態期望基於原始通知的某種類型的響應,則它可能變得難看。 第二種解決方案需要在兩種狀態下都實現新的導出函數,這提示開發人員考慮函數在只讀模式下執行的操作。但大多數方法都會在兩種狀態下做同樣的事情,其餘的都不應該做任何事情,甚至拋出異常......
有沒有更好的方法來實現類似的東西?
我可能有點不清楚,但我認爲你的一些建議與我的想法相似。我不打算在DLL接口中複製函數 - 我希望DLL的有狀態對使用DLL的應用程序是透明的。 有趣的想法與函數指針...但是當我切換到只讀模式(對不同類型的對象的幾個setter)時,可能會有相當多的函數指針改變。我想我可以把它們放在一個靜態表中並切換整個表格...... –