91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【設計模式與Android】備忘錄模式——在齊太史簡

發布時間:2020-06-08 16:39:41 來源:網絡 閱讀:678 作者:東風玖哥 欄目:移動開發

什么是備忘錄模式

 

所謂備忘錄模式,就是在不破壞封閉的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態,以后可將這個對象恢復到原先保存的狀態的設計模式。

 

備忘錄模式的實現方式

 

備忘錄模式的實現方式需要保證被保存的對象狀態不能被對象從外部訪問,目的是為了保護好被保存的這些對象狀態的完整性以及內部實現不向外暴露。

 

民族英雄文天祥《正氣歌》記載了一個“在齊太史簡”的故事,我們先定義一個歷史類:

public class History {

    private String[] recorders = {"太史伯","太史仲","太史叔","太史季","南史氏"};
    private int record_num = 0;//被崔杼殺害的史官數量
    private String truth = "崔杼弒其君";

    public History(int record_num) {
        this.record_num = record_num;
    }

    /**
     * 發生
     */
    public void happen(){
        Log.e("歷史事件發生",truth);
    }

    /**
     * 記錄
     */
    public Memoto record(){
        Log.e(recorders[record_num] + "書曰",truth);
        Memoto memoto = new Memoto(truth);
        return memoto;
    }

    /**
     * 史官遇害
     */
    public void killRecorder(){
        truth = "暴病而死";
        Log.e("崔杼殺害"+recorders[record_num] + ",妄圖篡改歷史",truth);
    }

    /**
     * 前赴后繼
     */
    public void recordAgain(Memoto memoto){
        this.truth = memoto.getTruth();
        Log.e(recorders[record_num] + "嗣書",truth);
    }

}

 

記載真相的備忘錄:

public class Memoto {

    private String truth;

    public Memoto(String truth) {
        this.truth = truth;
    }

    public String getTruth() {
        return truth;
    }
}

 

備忘錄的操作者Caretaker:

public class Caretaker {

    Memoto memoto;

    public void archive(Memoto memoto){
        this.memoto = memoto;
    }

    public  Memoto getMemoto(){
        return memoto;
    }

}

 

“在齊太史簡”的全過程:

History history_0 = new History(0);
history_0.happen();

Caretaker caretaker = new Caretaker();

caretaker.archive(history_0.record());
history_0.killRecorder();

History history_1 = new History(1);
history_1.recordAgain(caretaker.getMemoto());
history_1.killRecorder();

History history_2 = new History(2);
history_2.recordAgain(caretaker.getMemoto());
history_2.killRecorder();

History history_3 = new History(3);
history_3.recordAgain(caretaker.getMemoto());

 

無獨有偶,秦始皇滅趙之后第一件事就是把趙國的史書全部燒毀,可是那句“某年月日,秦王為趙王擊缻”還是被司馬遷記錄下來,千古流傳,這也是現實中的備忘錄模式的功勞。

 

Android源碼中的備忘錄模式

 

(1)onSaveInstanceState

當某個Activity變得容易被系統銷毀時,該Activity的onSaveInstanceState方法就會被執行,除非該Activity是被用戶主動銷毀的。

 

Android開發中如何利用備忘錄模式

 

(1)備忘錄模式給用戶提供了一種可以恢復狀態的機制,可以使用戶能夠比較方便地回到某個歷史的狀態。

 

(2)備忘錄模式實現了信息的封裝,使得用戶不需要關心狀態的保存細節。

 

需要注意的幾個問題

 

1)備忘錄模式的缺點在于消耗資源。如果類的成員變量過多,勢必會占用比較大的資源,而且每一次保存都會消耗一定的內存。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福安市| 东源县| 阿巴嘎旗| 霍山县| 潼南县| 禹州市| 光山县| 武平县| 扶风县| 龙泉市| 嵊州市| 离岛区| 巴中市| 桐城市| 弥勒县| 南京市| 禄丰县| 南陵县| 新乡市| 马边| 明水县| 荔浦县| 蒙自县| 永嘉县| 卫辉市| 兴山县| 林州市| 庆元县| 铁力市| 金华市| 扎兰屯市| 宁海县| 凤城市| 定兴县| 青龙| 揭东县| 武城县| 繁昌县| 韩城市| 岳西县| 巫山县|