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
張貼留言