1. 程式人生 > >c++的設計模式之備忘錄模式

c++的設計模式之備忘錄模式

備忘錄模式就是能夠儲存當前狀態,類似於玩遊戲的時候可以不斷的讀檔,同時在玩了新的遊戲的時候,又可以更新到檔案裡。

#include <iostream>
#include <vector>
using namespace std;

//需儲存的資訊  
class Memento    
{  
	public:  
		int m_vitality; //生命值  
		int m_attack;   //進攻值  
		int m_defense;  //防守值  
	public:  
		Memento(int vitality, int attack, int defense):   
			m_vitality(vitality),m_attack(attack),m_defense(defense){}  
		Memento& operator=(const Memento &memento)   
		{  
			m_vitality = memento.m_vitality;  
			m_attack = memento.m_attack;  
			m_defense = memento.m_defense;  
			return *this;  
		}  
};  
//遊戲角色  
class GameRole    
{  
	private:  
		int m_vitality;  
		int m_attack;  
		int m_defense;  
	public:  
		GameRole(): m_vitality(100),m_attack(100),m_defense(100) {}  
		Memento Save()  //儲存進度,只與Memento物件互動,並不牽涉到Caretake  
		{   
			Memento memento(m_vitality, m_attack, m_defense);  
			return memento;  
		}  
		void Load(Memento memento)  //載入進度,只與Memento物件互動,並不牽涉到Caretake  
		{  
			m_vitality = memento.m_vitality;  
			m_attack = memento.m_attack;   
			m_defense = memento.m_defense;  
		}  
		void Show() { cout<<"vitality : "<< m_vitality<<", attack : "<< m_attack<<", defense : "<< m_defense<<endl; }  
		void Attack() { m_vitality -= 10; m_attack -= 10;  m_defense -= 10; }  
};  
//儲存的進度庫  
class Caretake    
{  
	public:  
		Caretake() {}  
		void Save(Memento menento) { m_vecMemento.push_back(menento); }  
		Memento Load(int state) { return m_vecMemento[state]; }  
	private:  
		vector<Memento> m_vecMemento;  
};  

//測試案例  
int main()  
{     
	Caretake caretake;  
	GameRole role;   
	role.Show();   //初始值  
	caretake.Save(role.Save()); //儲存狀態  
	role.Attack();     
	role.Show();  //進攻後  
	role.Load(caretake.Load(0)); //載入狀態   
	role.Show();  //恢復到狀態0  
	return 0;  
}  


相關推薦

c++的設計模式備忘錄模式

備忘錄模式就是能夠儲存當前狀態,類似於玩遊戲的時候可以不斷的讀檔,同時在玩了新的遊戲的時候,又可以更新到檔案裡。 #include <iostream> #include <vector> using namespace std; //需儲存的資

設計模式備忘錄模式

set 2017年 image 對象 array mem .com void oid 代碼實現 /** * 源發器類 * @author bzhx * 2017年3月15日 */ public class Emp { private

Java 設計模式 備忘錄模式

clas AR java OS ont pre pub HR http http://www.verejava.com/?id=16999143457673 package com.memento.theory; import java.util.Stack; publ

設計模式的藝術 行為型模式備忘錄模式

前言 每個人都會有後悔的時候,可是人生沒有後悔藥,做過的事情無法再去後悔,軟體設計中卻是有這麼一種後悔機制,叫做備忘錄模式,它就是軟體中的"後悔藥" 什麼是備忘錄模式  Memento Pattern 在不破壞封裝的前提下,捕獲一個物件的內部狀態,並在物件之外儲存這個狀態,這樣

設計模式的藝術 行為型模式備忘錄模式

前言 每個人都會有後悔的時候,可是人生沒有後悔藥,做過的事情無法再去後悔,軟體設計中卻是有這麼一種後悔機制,叫做備忘錄模式,它就是軟體中的"後悔藥" 什麼是備忘錄模式  Memento Pattern 在不破壞封裝的前提下,捕獲一個物件的內部狀態,並在物件之外儲存這個狀

面向物件設計模式---備忘錄模式(Memento Pattern)

今天要向大家介紹的模式是備忘錄模式,有時又稱作快照模式。 這個備忘錄模式一個典型的應用場景就是遊戲存檔。有時候為了打Boss,沒有成功,反而被Boss打死了,這個時候就需要利用我們之前的存檔回到最接近Boss的那一關再繼續。 備忘錄模式的定義如下: 在不破壞封裝性的前

研磨設計模式 備忘錄模式(Memento)1——跟著cc學設計系列

19.1  場景問題 19.1.1  開發模擬系統 考慮這樣一個模擬應用,功能是:模擬運行鍼對某個具體問題的多個解決方案,記錄執行過程的各種資料,在模擬執行完成過後,好對這多個解決方案進行比較和評價,從而選定最優的解決方案。 這種模擬系統,在很多領域都有應用,比如:工作流系

淺談JAVA設計模式——備忘錄模式(Memento)

一、概述 在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。 二、適用性 1.必須儲存一個物件在某一個時刻的(部分)狀態,這樣以後需要時它才能恢復到先前的狀態。 2.如果一個用介面來讓其它物件直接得到這

折騰Java設計模式備忘錄模式

att without 還原 回退 gets img 耦合 long str 原文地址:折騰Java設計模式之備忘錄模式 備忘錄模式 Without violating encapsulation, capture and externalize an object‘s

C++設計模式狀態模式(二)

virtual alt 虛構函數 需求 rate names clas term delete 2、智能空調的設計與實現 某軟件公司將開發一套智能空調系統: 系統檢測到溫度處於20---30度之間,則切換到常溫狀態;溫度處於30---45度,則切換到制冷狀態;

C#設計模式(23)——備忘錄模式(Memento Pattern)

block con 通訊 想是 multiple 數字 優缺點 引用 get 原文:C#設計模式(23)——備忘錄模式(Memento Pattern)一、引言   在上一篇博文分享了訪問者模式,訪問者模式的實現是把作用於某種數據結構上的操作封裝到訪問者中,使得操作和數

c#設計模式代理模式(Proxy Pattern)

ole 購物 click size ont 業務 添加 .html 售票 引言 代理這個詞語,大家在現實世界已經頻繁的接觸過,例如火車站代理售票點,因為這些代理售票點的存在,我們不必要去火車站的售票處就可以查詢或者取到火車票.代理點本身是沒有能力生產車票的,我們在代理處享

C++設計模式-工廠模式的總結

ide char* break product 有一個 對象 ride pan 多態 工廠模式分為3種,即簡單工廠模式、工廠方法模式、抽象工廠模式,其實大同小異,總結下來就是: 簡單工廠模式:一個工廠,多個產品。產品需要有一個虛基類。通過傳入參數,生成具體產品對象,並利用

C++設計模式狀態模式

程序 class lse 轉移 tchar pri dot ace RKE 當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。 狀態模式主要解決的是當控制一個對象狀態轉換的條件表達式過於復雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的

C++設計模式組合模式

層次 concrete 鏈表 show 中間 圖片 push_back 用戶 tchar DP書上給出的定義:將對象組合成樹形結構以表示“部分-整體”的層次結構。組合使得用戶對單個對象和組合對象的使用具有一致性。註意兩個字“樹形”。這種樹形結構在現實生活中隨處可見,比如一個

C++設計模式訪問者模式

alt bubuko 入口 for art argv ger iter 控制 簡述 訪問者模式(Visitor Pattern)表示一個作用於某對象結構中的各元素的操作,它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。 代碼實現: // Visitor.c

設計模式漫談備忘錄模式

its 復數 保存數據 就是 恢復 如果 編程語言 bsp splay 最近很長時間沒寫博客了,其實這個博客寫過一半,中間有事耽擱了,就沒繼續。主要是給別人做了一個小系統,及維護碼雲上的代碼庫。同居的日子也占了我很多時間。 最近也是煩,欠了7W,各種煩事。所以可想寫個博客靜

C++設計模式模板模式

C++設計模式之模板模式 定義:定義一個操作中演算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變演算法的結構即可重定義該演算法的某些特定步驟。 其實這個設計模式是比較簡單的一個密室,換句話來說就是利用虛擬函式,把一些步驟延遲到子類中進行實現,設計模式中

23種設計模式 State模式(狀態模式C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

23種設計模式 Observer模式(釋出-訂閱模式C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!