你應該看看不同的design patterns幫助你實現你的要求。
memento pattern例如提供了保存對象並恢復其先前狀態的能力。如果你稍微修改它,它可能適合你的需求:有一些保存應實現Saveable
public interface Saveable {
void save(Memento memento);
void restore(Memento memento);
}
public interface Memento {
void putString(String key, String value);
String getString(String key);
void putInteger(String key, int value);
int getInteger(String key);
// ... put/get for other data types
Memento getChild(String key, boolean createIfNotExisting);
}
所有你的遊戲部分。當調用save
或restore
時,他們將內部表示寫入/從外部狀態對象Memento
讀取。
通過具有Memento
不同實現,你可以通過XML文件,對象序列化,甚至關係型數據庫實現存儲(XMLMemento
,SerializationMemento
,JPAMemento
,...)。在運行時,具體實現由abstract factory或factory method選擇。
用法樣品:
Memento memento = mementoFactory.create();
player.save(memento.createChild("player", true));
board.save(memento.createChild("board", true));
...
memento.store();
例如,Eclipse framwork uses this pattern保存的UI部件的狀態。 (但它提供的唯一實現是XMLMemento
)。
另一個有用的模式是builder pattern。其目的是將複雜對象的構建與其表示分離。通過這樣做,相同的構建過程可以創建不同的表示。英文維基頁面錯過了這種模式的一些重要方面,所以如果它符合您的需求,您應該閱讀book中的原始章節。
的一種助劑的使用範例:
GameStateSaver saver = saverFactory.createSaver();
saver.savePlayer(player);
saver.saveBoard(board);
...
saver.store();
在這裏,遊戲對象本身不知道/他們是如何被保存,而是在GameStateSaver
實現了知識。請注意,這也有一個缺點:對象必須通過公共API提供所有狀態(因此內部私有狀態無法保存,因爲它無法通過保存程序訪問)。
您需要存儲所有使程序的當前狀態爲唯一的信息。如果你使用的是MVC架構,那麼這就是Model。 – vandale
@vandale對於我需要保存的內容我不會感到困惑,但是如何實現保存代碼,以便我可以隨時改變我的想法,瞭解我希望保存的介質。 – agent154
你正在尋找的界面是'Externalizable'。 – AJMansfield