Java備忘錄模式(Memento)
本文我們來介紹下java23種設計模式中的備忘錄模式。
備忘錄模式Memento
使用場景
錄入大批人員資料。正在錄入當前人資料時,發現上一個人錄錯了,
此時需要恢復上一個人的資料,再進行修改。
Word文檔編輯時,忽然電腦死機或斷電,再打開時,可以看到word
提示你恢復到以前的文檔
管理系統中,公文撤回功能。公文發送出去后,想撤回來
核心內容
就是保存某個對象內部狀態的拷貝,這樣以后就可以將該對象恢復到原先的狀態
類圖
具體實現
負責人類
/** * 負責人類 * 負責管理備忘錄對象 * @author 波波烤鴨 * @email dengpbs@163.com * */ public class CareTaker { private EmpMemento memento; //備忘點較多時,將備忘錄壓棧,將多個備忘錄對象,序列化和持久化 實現撤回多步的操作 // private Stack
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
源發起類
/** * 源發器類 * @author 波波烤鴨 * @email dengpbs@163.com * */ public class Emp { private String ename; private int age; private double salary; //進行備忘操作,并返回備忘錄對象 public EmpMemento memento(){ return new EmpMemento(this); } //進行數據恢復,恢復成制定備忘錄對象的值 public void recovery(EmpMemento mmt){ this.ename = mmt.getEname(); this.age = mmt.getAge(); this.salary = mmt.getSalary(); } public Emp(String ename, int age, double salary) { super(); this.ename = ename; this.age = age; this.salary = salary; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
備忘錄類
/** * 備忘錄類 * @author 波波烤鴨 * @email dengpbs@163.com * */ public class EmpMemento { private String ename; private int age; private double salary; public EmpMemento(Emp e) { this.ename = e.getEname(); this.age = e.getAge(); this.salary = e.getSalary(); } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
測試類
public static void main(String[] args) { CareTaker taker = new CareTaker(); Emp emp = new Emp("bobo烤鴨", 18, 880); System.out.println("第一次打印對象:"+emp.getEname()+"---"+emp.getAge()+"---"+emp.getSalary()); taker.setMemento(emp.memento()); //備忘一次 emp.setAge(28); emp.setEname("dpb"); emp.setSalary(19000); System.out.println("第二次打印對象:"+emp.getEname()+"---"+emp.getAge()+"---"+emp.getSalary()); emp.recovery(taker.getMemento()); //恢復到備忘錄對象保存的狀態 System.out.println("第三次打印對象:"+emp.getEname()+"---"+emp.getAge()+"---"+emp.getSalary()); }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
輸出
第一次打印對象:bobo烤鴨---18---880.0 第二次打印對象:dpb---28---19000.0 第三次打印對象:bobo烤鴨---18---880.0
1
2
3
撤回成功~~
開發中常見的應用場景:
棋類游戲中的,悔棋
普通軟件中的,撤銷操作
數據庫軟件中的,事務管理中的,回滾操作
Photoshop軟件中的,歷史記錄
Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。