簡體   English   中英

Momento 和原型設計模式有什么區別?

[英]What is the difference between the Momento and Prototype Design Pattern?

Momento 和原型設計模式(來自 GOF)之間觀察到的差異:

  1. Momento 設計模式使用 class x 來創建 class y 的內部 state 的快照。 原型設計模式使用 class y 創建 class y 的內部 state 的快照(=克隆)。
  2. Momento 設計模式是一種行為模式,Prototype 設計模式是一種創造型設計模式。
  3. Momento 設計模式使得在 class x 中創建 class y 的 state 的部分快照成為可能。 在原型設計模式中,創建了 class y 的完整快照(=克隆)。
  4. 意圖不同。

使用 Momento 和原型設計模式可以獲得相同的結果:

  • 原型設計模式:object x 的 state 可以被克隆,存儲在一個列表中,分配給 object x 以防需要撤銷操作。
  • Momento設計模式:object x的state可以保存在object y里面,存儲在一個列表中,分配給object x,以防需要undo操作。

這兩種模式之間有什么區別(除了已經列出的那些)? 我們什么時候會使用一個而不是另一個? 在我看來,原型模式是首選,以防需要對完整的 object 進行“快照”並將其堆疊在列表中以進行撤消操作。

原型模式描述了一種創建對象的方式。 對象的行為方式與原型模式無關。 Memento 模式描述了對象的行為方式。 對象的創建方式與 Memento 模式無關。

state 更廣泛地說,任何創建模式都可以產生任何行為(或結構或任何其他)模式所必需的對象。 這並不意味着創建模式以任何方式與它們創建的對象恰好實現的任何模式重疊。

Memento的本質是一個object,有兩個接口。 從 GoF 書第 285 頁,

Mementos 實際上有兩個接口。 Caretaker 看到一個狹窄的 Memento 接口——它只能將 memento 傳遞給其他對象。 相比之下,Originator 看到了一個廣泛的接口,一個允許它訪問所有數據的接口......

因此,Memento 模式的關鍵在於在一個 object 中實現這兩個接口。如果您選擇通過克隆來實例化 object,則可以使用兩種模式; 但是創造和行為之間有明確的界限。 一旦創建了克隆,原型模式就會停止。 當 object 同時使用窄接口和寬接口時,Memento 模式就開始了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM