class CoreMemento { friend class Core; private: CoreMemento() {} CoreMemento(const CoreMemento&); CoreMemento& operator=(const CoreMemento&); // member data }; class Core { public: // member function, getter/setter function CoreMemento getMemento(); bool recovery(const CoreMemento&); }; class ConfigDialog { public: ConfigDialog(Core& core) : m_core(core) { m_memento = m_core.getMemento(); } void OnCancel() { core. recovery(m_backup); } // member function, setting core function private: Core& m_core; CoreMemento m_backup; };Memento class的實作如上所示,它沒有成員函式,只有成員變數記錄資料,亦沒有任何資料對外公開,甚至宣告copy constructor和operator=為私有不讓programmer複製物件,只宣告friend class讓Core作存取。因為實際上Memento class的用途只為了記錄Core的資料供還原使用,過多的公開是不必的,還可能誤導programmer認為Memento是可修改的,良好的設計應該在編譯期就檢查出來。
假設ConfigDialog是一個供使用者設定Core的UI介面,當使用者修改途中按取消鍵,會呼叫OnCancel(),這函式就把一開始的CoreMemento提供給Core作還原。
1 則留言:
至於漂亮的博客,但你可以做這個博客更冷靜,如果你可以配置的語言轉換pluigin,但都是一樣的,你已經做得很好:) http://www.iessaywriter.com
張貼留言