程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 設計形式中的備忘錄形式解析及相干C++實例運用

設計形式中的備忘錄形式解析及相干C++實例運用

編輯:關於C++

設計形式中的備忘錄形式解析及相干C++實例運用。本站提示廣大學習愛好者:(設計形式中的備忘錄形式解析及相干C++實例運用)文章只能為提供參考,不一定能成為您想要的結果。以下是設計形式中的備忘錄形式解析及相干C++實例運用正文


備忘錄形式旨在不損壞封裝性的條件下,捕捉一個對象的外部狀況,並在該對象以外保留這個狀況。如許今後便可將該對象恢復到本來保留的狀況。在敕令形式中,備忘錄形式常常還常常被用來保護可以撤消(Undo)操作的狀況。

類圖:

  • Originator:擔任創立一個備忘錄Memento,用以記載以後時辰它的外部狀況,並可以使用備忘錄恢復外部狀況。Originator可依據須要決議Memento存儲Originator的哪些外部狀況。
  • Memento:擔任存儲Originator對象的外部狀況,並可避免Originator之外的其他對象拜訪備忘錄Memento。備忘錄有兩個接口,Caretaker只能看到備忘錄的窄接口,它只能將備忘錄傳遞給其他對象。Originator可以或許看到一個寬接口,許可它拜訪前往到先前狀況所需的一切數據。
  • Caretaker:擔任保留好備忘錄Memento,不克不及對備忘錄的內容停止操作或檢討。

Memento形式中封裝的是須要保留的狀況,當須要恢復的時刻才掏出來停止恢復.道理很簡略,完成的時刻須要留意一個處所:窄接口和寬接口.所謂的寬接口就是普通意義上的接口,把對外的接口作為public成員;而窄接口反之,把接口作為private成員,而把須要拜訪這些接口函數的類作為這個類的友元類,也就是說接口只裸露給了對這些接口感興致的類,而不是裸露在內部.上面的完成就是窄完成的辦法來完成的.

Memento形式比擬實用於功效比擬龐雜的,但須要保護或記載汗青屬性的類,或許須要保留的屬性只是浩瀚屬性中的一小部門時,Originator可以依據保留的Memento信息復原到前一狀況。

假如在某個體系中應用敕令形式時,須要完成敕令的撤消功效,那末敕令形式可使用備忘錄形式來存儲可撤消操作的狀況。
實例:

#include <iostream> 
#include <string> 
using namespace std; 
 
class Memento 
{ 
private: 
  string state; 
 
public: 
  Memento(string state) 
    :state(state) 
  {} 
  string GetState() 
  { 
    return state; 
  } 
  void SetState(string state) 
  { 
    this->state = state; 
  } 
}; 
 
class CareTaker 
{ 
private: 
  Memento *memento; 
 
public: 
  void SetMemento(Memento *memento) 
  { 
    this->memento = memento; 
  } 
  Memento* GetMemento() 
  { 
    return this->memento; 
  } 
}; 
 
class Originator 
{ 
private: 
  string state; 
   
public: 
  Originator(string state) 
  { 
    this->state = state; 
  } 
 
  void RestoreMemento(Memento *memento) 
  { 
    state = memento->GetState(); 
  } 
 
  Memento *CreateMemento() 
  { 
    return new Memento(state); 
  } 
 
  void SetState(string state) 
  { 
    this->state = state; 
  } 
 
  void ShowState() 
  { 
    cout<< this->state <<endl; 
  } 
}; 
 
int main() 
{ 
  Originator *originator = new Originator("2012年11月11日,光棍節,一小我,沒有女同伙"); 
  CareTaker *caretaker = new CareTaker(); 
  caretaker->SetMemento(originator->CreateMemento()); 
   
  cout<<"2012年11月11日,光棍節凌晨的狀況是:"<<endl; 
 
  originator->ShowState(); 
 
  originator->SetState("正午加入同窗婚禮去了,錦府鹽幫飯鋪"); 
  originator->ShowState(); 
 
  cout<<"早晨回來的狀況是"<<endl; 
  originator->RestoreMemento(caretaker->GetMemento()); 
  originator->ShowState(); 
 
  cout<<"跟凌晨一樣,嗨"<<endl; 
 
  system("pause"); 
  return 0; 
} 

輸入是如許的

備忘錄形式實用性:

  • 必需保留一個對象在某一個時辰的(部門)狀況, 如許今後須要時它能力恢復到先前的狀況。
  • 假如一個用接口來讓其它對象直接獲得這些狀況,將會裸露對象的完成細節並損壞對象的封裝性。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved