我已經檢查過每一個地方,並閱讀了無數的文章。我甚至在一些中文論壇上尋找答案。事情是我不能完全理解C#的紀念模式。不同的文章展示了不同的方式,我無法正確理解它。大多數文章只顯示簡單的東西,如字符串紀念品。我想了解如何做一個撤消功能,需要幫助,而且,你如何做一個公共部分類的撤消功能?,我只需要一個小例子顯示公共部分類的紀念品。提前致謝。關於紀念品的一些解釋
0
A
回答
1
基本上,紀念是一種保存和恢復對象狀態的方法。但是它超出了這個範圍:這是一種保留封裝的方式。因此,如果要保存其狀態的對象具有一些私人成員,則備忘錄模式是以有限方式訪問這些成員的一種方式。
舉個例子,假設我們有一個2D人物做周邊的地圖醉酒散步:
public class Sprite
{
private double _x = 0, _y = 0;
public void Run()
{
var random = new byte[2];
new Random().NextBytes(random);
_x += (double)random[0];
_y += (double)random[1];
}
public void Render()
{
Console.WriteLine("({0}, {1})", _x, _y);
}
}
比方說,我們不想暴露x和y作爲公共成員,但我們要能夠保存對象的狀態。然後,我們可以創建一個封裝對象的狀態留念類:
public class SpriteMemento
{
public double X { get; set; }
public double Y { get; set; }
}
Sprite類可以接受留念的對象,以恢復其狀態,並提供一個節省:
public class Sprite
{
// ...
public SpriteMemento Memento
{
get { return new SpriteMemento { X = _x, Y = _y }; }
}
public void Restore(SpriteMemento memento)
{
if (memento == null)
return;
_x = memento.X;
_y = memento.Y;
}
}
現在,讓我們說我們有另一個控制運行的類。現在,我們可以將這個類提供了一個「撤銷」功能:
static void Main(string[] args)
{
var sprite = new Sprite();
SpriteMemento state = null;
while (true)
{
string input = Console.ReadLine();
if (input == "run")
sprite.Run();
else if (input == "save")
state = sprite.Memento;
else if (input == "undo")
sprite.Restore(state);
sprite.Render();
}
}
至於部分類,實在沒有什麼區別 - 只是釘在「局部」的Sprite類以上,並且紀念圖案仍然完好無損。
相關問題
- 1. 使用Javascript的紀念品
- 2. 紀念品設計模式
- 3. 紀念品實施VBA
- 4. .NET上的紀念品實現
- 5. 關於Mulesoft的一些概念問題
- 6. 如何在紀念圖案中創建紀念品的默認實例?
- 7. 需要一些解釋關於Neo4j的基本關係查詢
- 8. 我需要一個解釋關於如何類型的作品
- 9. 我對WPF中MVVM概念的解釋(關於主持人)
- 10. 瞭解一些概念
- 11. 孤男寡女關於PHP的一些推廣的解釋
- 12. Git - 需要關於rebase的一些解釋
- 13. 需要關於linux內核等待隊列的一些解釋
- 14. Ruby On Rails:我需要一些關於表格的解釋
- 15. 需要關於異步任務的一些解釋
- 16. 關於我的變量範圍需要一些解釋
- 17. 我需要一些關於這個彙編代碼的解釋
- 18. 解釋一些關於字符串的細節
- 19. 需要一些關於Qt :: operator的解釋
- 20. 需要一些關於history.js的解釋Benjamin
- 21. 需要關於C樹的一些解釋
- 22. 我需要一些關於接收行爲的解釋
- 23. 需要一些關於jQuery DOMready的解釋
- 24. 需要一些關於遞歸的解釋?
- 25. 幾何概念的解釋
- 26. 關於gretel gem的解釋?
- 27. 關於(jquery)的解釋?
- 28. 關於AIML的解釋器
- 29. 關於SqlSessionFactory的解釋
- 30. 關於base..ctor()的解釋
爲什麼要一個分部類的行爲有什麼不同,關於紀念? – McGarnagle
你有看到這個嗎?清晰的描述和簡單的例子。 http://social.msdn.microsoft.com/Forums/en-US/e0a108e1-484b-4b5d-83f6-48729f712353/memento-design-pattern?forum=Vsexpressvcs – McGarnagle