備忘錄模式(Memento)
情節:如果再給我一次機會。。。
定義:在不破壞封閉的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。
結構圖:
public class GameRole {
public int vit;
public int atk;
public int defense;
public int getVit() {
return vit;
}
public void setVit(int vit) {
this.vit = vit;
}
public int getAtk() {
return atk;
}
public void setAtk(int atk) {
this.atk = atk;
}
public int getDefense() {
return defense;
}
public void setDefense(int defense) {
this.defense = defense;
}
public void StateDisplay(){
System.out.println("VIT"+this.vit);
System.out.println("ATK"+this.atk);
System.out.println("DEFENSE"+this.defense);
}
public void GetInitState(){
this.atk = 100;
this.defense = 100;
this.vit = 100;
}
public void Fight(){
this.atk = 0;
this.defense = 0;
this.vit = 0;
}
//儲存角色狀態
public Memento SaveState(){
return new Memento(vit, atk, defense);
}
//恢復角色狀態
public void RecoveryState(Memento memento){
this.atk = memento.atk;
this.defense = memento.defense;
this.vit = memento.vit;
}
}
public class Memento {
//體力,攻擊力,防禦力
public int vit;
public int atk;
public int defense;
public Memento(int vit, int atk, int defense) {
super();
this.vit = vit;
this.atk = atk;
this.defense = defense;
}
public int getVit() {
return vit;
}
public void setVit(int vit) {
this.vit = vit;
}
public int getAtk() {
return atk;
}
public void setAtk(int atk) {
this.atk = atk;
}
public int getDefense() {
return defense;
}
public void setDefense(int defense) {
this.defense = defense;
}
}
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
public class Client {
public static void main(String[] args) {
//大戰前
GameRole xiaoRole = new GameRole();
xiaoRole.GetInitState();
xiaoRole.StateDisplay();
//儲存進度
Caretaker stateAdmin = new Caretaker();
stateAdmin.setMemento(xiaoRole.SaveState());
//大戰時
xiaoRole.Fight();
xiaoRole.StateDisplay();
//恢復之前狀態
xiaoRole.RecoveryState(stateAdmin.getMemento());
xiaoRole.StateDisplay();
}
}
把要儲存的細節封裝在Memento中,哪一天要更改儲存的細節就不用影響客戶端了
比較適用於功能比較複雜的,但需要維護或記錄屬性歷史的類;需要儲存的屬性只是眾多屬性的一小部分時,Originator可以根據儲存的Memento資訊還原到前一狀態。
相關文章
- 設計模式 - 備忘錄模式 ( Memento )設計模式
- Rust語言之GoF設計模式:備忘錄Memento模式RustGo設計模式
- 設計模式----備忘錄模式設計模式
- 19_備忘錄模式模式
- 行為型模式:備忘錄模式模式
- 設計模式之備忘錄模式設計模式
- 設計模式:可複用物件導向軟體及基礎:4-7 物件行為模式:備忘錄模式(Memento)設計模式物件
- Android備忘錄《單例模式》Android單例模式
- 第 22 章 備忘錄模式模式
- 實驗 20:備忘錄模式模式
- 簡說設計模式——備忘錄模式設計模式
- 極簡設計模式-備忘錄模式設計模式
- GoLang設計模式11 - 備忘錄模式Golang設計模式
- 11.21實驗 20:備忘錄模式模式
- 設計模式漫談之備忘錄模式設計模式
- 設計模式 | 備忘錄模式及典型應用設計模式
- 折騰Java設計模式之備忘錄模式Java設計模式
- 19.java設計模式之備忘錄模式Java設計模式
- Android原始碼分析之備忘錄模式Android原始碼模式
- 備忘錄設計模式知識概括設計模式
- 備忘錄
- 【備忘錄】
- 行為型設計模式 - 備忘錄模式詳解設計模式
- 抽絲剝繭——備忘錄設計模式設計模式
- Eigen備忘錄
- Python 備忘錄Python
- RabbitMQ備忘錄MQ
- 設計模式(Swift) - 2.單例模式、備忘錄模式和策略模式設計模式Swift單例
- 無廢話設計模式(16)行為型模式--備忘錄模式設計模式
- 軟體設計模式學習(二十二)備忘錄模式設計模式
- Swift 中的設計模式 #2 觀察者模式與備忘錄模式Swift設計模式
- linux 備忘記錄Linux
- Java備忘錄《集合》Java
- 網站備忘錄網站
- 設計模式學習筆記(十八)備忘錄模式及其實現設計模式筆記
- Java進階篇設計模式之十二 ---- 備忘錄模式和狀態模式Java設計模式
- 設計模式 第十章 備忘錄模式、直譯器模式、狀態模式設計模式
- Java備忘錄《“==” 和 “equals”》Java