1. 程式人生 > 其它 >python爬蟲 - js逆向之svg字型反爬破解

python爬蟲 - js逆向之svg字型反爬破解

編輯說明

概述

在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態

結構圖

程式碼實現

發起人

    /// <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();
        }
    }

執行結果

優勢

給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。

實現了內部狀態的封裝。除了建立它的發起人之外,其他物件都不能夠訪問這些狀態資訊。

簡化了發起人類。發起人不需要管理和儲存其內部狀態的各個備份,所有狀態資訊都儲存在備忘錄中,並由管理者進行管理,這符合單一職責原則。

使用場景

需要儲存/恢復資料的相關狀態場景。

提供一個可回滾的操作。

缺陷

消耗資源。如果類的成員變數過多,勢必會佔用比較大的資源,而且每一次儲存都會消耗一定的記憶體。

Demo