Java設計模式初識之備忘錄模式詳解
簡介
備忘錄設計模式(Memento Design Pattern)也叫作快照(Snapshot)模式,主要用于實現(xiàn)防丟失、撤銷、恢復等功能。
其定義是,在不違背封裝原則的前提下,捕獲一個對象的內部狀態(tài),并在該對象之外保存這個狀態(tài),以便之后恢復對象先前的狀態(tài)。
典型實現(xiàn)
首先,定義一個備忘錄 Memento 類存儲狀態(tài),其代碼示例如下:
public class Memento {
private String state;
public Memento(Originator o) {
this.state = o.getState();
}
public void setState(String State) {
this.state = state;
}
public String getState() {
return this.state;
}
}
然后,把需要被存儲狀態(tài)的對象稱作為發(fā)起者,定義為 Originator 類,包含用于存儲成員數(shù)據(jù)的屬性,其代碼示例如下:
public class Originator {
private String state;
public Originator() {}
// 創(chuàng)建一個備忘錄對象
public Memento createMemento() {
return new Memento(this);
}
// 根據(jù)備忘錄狀態(tài)恢復原發(fā)器狀態(tài)
public void restoreMemento(Memento m) {
state = m.getState();
}
public void setState(String State) {
this.state = state;
}
public String getState() {
return this.state;
}
}
定義一個負責人 Caretaker 用于管理備忘錄對象,其代碼示例如下:
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return this.memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
總結
優(yōu)點
備忘錄模式的主要優(yōu)點如下:
給用戶提供了一種可以恢復狀態(tài)的機制,可以使用戶能夠比較方便地回到某個歷史的狀態(tài)
實現(xiàn)了內部狀態(tài)的封裝,使得用戶不需要關心狀態(tài)的保存細節(jié)
缺點
備忘錄模式的主要缺點如下:
如果要保存的內部狀態(tài)信息過多或者特別頻繁,將會占用比較大的內存資源
適用場景
備忘錄模式的適用場景如下:
保存一個對象在某一時刻的全部狀態(tài)或部分狀態(tài),方便后續(xù)實現(xiàn)恢復和撤銷
防止外界對象破壞一個對象歷史狀態(tài)的封裝性,避免將對象歷史狀態(tài)的實現(xiàn)細節(jié)暴露給外界對象
源碼
在 JDK 中 java.util.Date 通過自身內部的一個 Long 值來實現(xiàn)備忘錄模式。
如下是源碼部分:
public class Date implements java.io.Serializable, Cloneable, Comparable<Date> {
private transient long fastTime;
public Date(long date) {
fastTime = date;
}
public long getTime() {
return getTimeImpl();
}
private final long getTimeImpl() {
if (cdate != null && !cdate.isNormalized()) {
normalize();
}
return fastTime;
}
}到此這篇關于Java設計模式初識之備忘錄模式詳解的文章就介紹到這了,更多相關Java備忘錄模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring AOP + 注解實現(xiàn)統(tǒng)一注解功能
本文我們通過Spring AOP和Java的自定義注解來實現(xiàn)日志的插入功能,非常不錯,具有一定的參考借鑒價值,需要的朋友一起看看吧2018-05-05
SpringBoot熱部署Springloaded實現(xiàn)過程解析
這篇文章主要介紹了SpringBoot熱部署Springloaded實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03

