1. 程式人生 > >淺談JAVA設計模式之——備忘錄模式(Memento)

淺談JAVA設計模式之——備忘錄模式(Memento)

一、概述

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

二、適用性

1.必須儲存一個物件在某一個時刻的(部分)狀態,這樣以後需要時它才能恢復到先前的狀態。

2.如果一個用介面來讓其它物件直接得到這些狀態,將會暴露物件的實現細節並破壞物件的封裝性。

三、參與者

1.Memento 備忘錄儲存原發器物件的內部狀態。

2.Originator 原發器建立一個備忘錄,用以記錄當前時刻它的內部狀態。 使用備忘錄恢復內部狀態.

3.Caretaker 負責儲存好備忘錄。 不能對備忘錄的內容進行操作或檢查。

四、類圖

五、示例

Memento

package com.lyz.design.memento;
/**
 * Memento 
 * @author liuyazhuang
 *
 */
public class Caretaker {
    
    private Memento memento;
    
    public Memento getMemento(){
        return this.memento;
    }
    
    public void setMemento(Memento memento){
        this.memento = memento;
    }
}

Originator
package com.lyz.design.memento;
/**
 * Originator 
 * @author liuyazhuang
 *
 */
public class Memento {

    private String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}

Caretaker
package com.lyz.design.memento;
/**
 * Caretaker 
 * @author liuyazhuang
 *
 */
public class Originator {

    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
    
    public Memento createMemento() {
        return new Memento(state);
    }
    
    public void setMemento(Memento memento) {
        state = memento.getState();
    }
    
    public void showState(){
        System.out.println(state);
    }
}

Test
package com.lyz.design.memento;
/**
 * Test 
 * @author liuyazhuang
 *
 */
public class Test {

    public static void main(String[] args) {
        Originator org = new Originator();
        org.setState("開會中");
        
        Caretaker ctk = new Caretaker();
        ctk.setMemento(org.createMemento());//將資料封裝在Caretaker
        
        org.setState("睡覺中");
        org.showState();//顯示
        
        org.setMemento(ctk.getMemento());//將資料重新匯入
        org.showState();
    }
}

result
睡覺中
開會中


相關推薦

JAVA設計模式——備忘錄模式Memento

一、概述 在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。 二、適用性 1.必須儲存一個物件在某一個時刻的(部分)狀態,這樣以後需要時它才能恢復到先前的狀態。 2.如果一個用介面來讓其它物件直接得到這

JAVA設計模式——組合模式Composite

一、概述 將物件組合成樹形結構以表示"部分-整體"的層次結構。"Composite使得使用者對單個物件和組合物件的使用具有一致性。 二、適用性 1.你想表示物件的部分-整體層次結構。 2.你希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構

JAVA設計模式——外觀模式(Facade)

一、概述 為子系統中的一組介面提供一個一致的介面,Facade模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 二、適用性 1.當你要為一個複雜子系統提供一個簡單介面時。子系統往往因為不斷演化而變得越來越 複雜。大多數模式使用時都會產生更多更小的類。這使得子系

JAVA設計模式——責任鏈模式(COR)

一、概述 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈, 並沿著這條鏈傳遞該請求,直到有一個物件處理它為止。 這一模式的想法是,給多個物件處理一個請求的機會,從而解耦傳送者和接受者. 二、適用性 1.有多個的物件可以處理一個

Java 設計模式 備忘錄模式

clas AR java OS ont pre pub HR http http://www.verejava.com/?id=16999143457673 package com.memento.theory; import java.util.Stack; publ

Java設計模式——單例模式

一、概述         單例模式主要是為了避免因為建立了多個例項造成資源的浪費,且多個例項由於多次呼叫容易導致結果出現錯誤,而使用單例模式能夠保證整個應用中有且只有一個例項。 二、定義 定義:只

Java設計模式——簡單工廠模式

一、定義         通過專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。 二、類圖 三、理解         Operation為抽象類,它定義了一個抽象方法getResult;OperationAdd和OperationSubtra

Java設計模式——抽象工廠模式(AbstractFactory)

一、對比簡單工廠模式、工廠方法模式         簡單工廠模式只通過一個工廠類,通過給定引數返回相應的例項物件。工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。 工廠方法模式的具體工廠類只能建立一個具體產品類的例項,而抽象工廠模式可以建立多個。 普通工廠產出是一個產

Java設計模式——建造者模式(Builder)

一、概述         將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。         建造者模式將複雜產品的構建過程封裝分解在不同的方法中,使得建立過程非常清晰,能夠讓我們更加精確的控制複雜產品物件的建立過程,同時它隔離了複雜產品物件的建立

Java設計模式——原型模式(Prototype)

一、概述         用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。 二、使用場景 1.當一個系統應該獨立於它的產品建立、構成和表示時。 2.當要例項化的類是在執行時刻指定時,例如,通過動態裝載。  3.為了避免建立一個與產品類層次平行的工廠類

Java設計模式——介面卡模式(Adapter)

一、概述         將一個類的介面轉換成客戶希望的另外一個介面。Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。在我們的應用程式中我們可能需要將兩個不同介面的類來進行通訊,在不修改這兩個的前提下我們可能會需要某個中介軟體來完成這個銜接的過程

Java設計模式——組合模式(Composite)

一、概述         將物件組合成樹形結構以表示"部分-整體"的層次結構。"Composite使得使用者對單個物件和組合物件的使用具有一致性。它定義瞭如何將容器物件和葉子物件進行遞迴組合,使得客戶在使用的過程中無須進行區分,可以對他們進行一致的處理。在使用組合模式中需要

Java設計模式——外觀模式(facade)

一、概述         為子系統中的一組介面提供一個一致的介面,Facade模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。我們都知道類與類之間的耦合越低,那麼可複用性就越好,如果兩個類不必彼此通訊,那麼就不要讓這兩個類發生直接的相互關係,如果需要呼叫裡面的方

Java設計模式——享元模式(Flyweight)

一、概述         運用共享技術有效地支援大量細粒度的物件。在一個系統中物件會使得記憶體佔用過多,特別是那些大量重複的物件,這就是對系統資源的極大浪費。享元模式對物件的重用提供了一種解決方案,它使用共享技術對相同或者相似物件實現重用。享元模式就是執行共享技術有效地支援

Java設計模式——迭代器模式(Iterator)

一、概述         給定一個語言,定義它的文法的一種表示,並定義一個直譯器,這個直譯器使用該表示來解釋語言中的句子。 二、使用場景 1.訪問一個聚合物件的內容而無需暴露它的內部表示。  2.支援對聚合物件的多種遍歷。  3.為遍歷不同的聚合結構提供一個統一的介

Java設計模式——觀察者模式(Observer)

一、概述         定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。觀察者模式定義了物件之間的一對多依賴關係,這樣一來,當一個物件改變狀態時,它的所有依賴者都會收到通知並且自動更新。在這裡,發生改變的物件稱之為觀

Java設計模式十七責任鏈模式Chain of Responsibility

前言: 接下來我們將要談談責任鏈模式,有多個物件,每個物件持有對下一個物件的引用,這樣就會形成一條鏈,請求在這條鏈上傳遞,直到某一物件決定處理該請求。但是發出者並不清楚到底最終那個物件會處理該請求,所

Java設計模式——單例項、簡單工廠、抽象工廠、觀察者

最近的專案裡面涉及到一些Java設計模式,在此簡單談一下自己的看法,以下示例一部分參考同行,大部分自己設計。 1.單例模式 如果一個類始終只能建立一個例項,則這個類成為單例類,這種設計模式稱為單例模式。 class Singleton {

Java設計模式原型模式Prototype

前言: 原型模式雖然是建立型的模式,但是與工程模式沒有關係,從名字即可看出,該模式的思想就是將一個物件作為原型,對其進行復制、克隆,產生一個和原物件類似的新物件。本小結會通過物件的複製,進行講解。在Java中,複製物件是通過clone()實現的,先建立一個原型類: publ

折騰Java設計模式備忘錄模式

att without 還原 回退 gets img 耦合 long str 原文地址:折騰Java設計模式之備忘錄模式 備忘錄模式 Without violating encapsulation, capture and externalize an object‘s