python爬蟲 - js逆向之svg字型反爬破解
阿新 • • 發佈:2021-11-19
概述
在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態
結構圖
程式碼實現
發起人
/// <summary> /// 發起人 /// </summary> public class Originator { private string state; public string State { get { return state; } set { state = value; } }public Memento CreateMemento() { return (new Memento(state)); } public void SetMemento(Memento memento) { state = memento.State; } public void Show() { Console.WriteLine("State=" + state); } }
備忘錄
/// <summary> /// 備忘錄 /// </summary> public class Memento { private string state; public Memento(string state) { this.state = state; } public string State { get { return state; } } }
管理者
///<summary> /// 管理者 /// </summary> public class Caretaker { private Memento memento; public Memento Memento { get { return memento; } set { memento = value; } } }
客戶端
class Program { static void Main(string[] args) { Originator o = new Originator(); o.State = "On"; o.Show(); Caretaker c = new Caretaker(); c.Memento = o.CreateMemento(); o.State = "Off"; o.Show(); o.SetMemento(c.Memento); o.Show(); Console.Read(); } }
執行結果
優勢
給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。
實現了內部狀態的封裝。除了建立它的發起人之外,其他物件都不能夠訪問這些狀態資訊。
簡化了發起人類。發起人不需要管理和儲存其內部狀態的各個備份,所有狀態資訊都儲存在備忘錄中,並由管理者進行管理,這符合單一職責原則。
使用場景
需要儲存/恢復資料的相關狀態場景。
提供一個可回滾的操作。
缺陷
消耗資源。如果類的成員變數過多,勢必會佔用比較大的資源,而且每一次儲存都會消耗一定的記憶體。