Java備忘錄模式(Memento)

      網友投稿 840 2022-05-30

      本文我們來介紹下java23種設計模式中的備忘錄模式。

      備忘錄模式Memento

      使用場景

      錄入大批人員資料。正在錄入當前人資料時,發現上一個人錄錯了,

      此時需要恢復上一個人的資料,再進行修改。

      Word文檔編輯時,忽然電腦死機或斷電,再打開時,可以看到word

      提示你恢復到以前的文檔

      管理系統中,公文撤回功能。公文發送出去后,想撤回來

      核心內容

      就是保存某個對象內部狀態的拷貝,這樣以后就可以將該對象恢復到原先的狀態

      類圖

      具體實現

      負責人類

      /** * 負責人類 * 負責管理備忘錄對象 * @author 波波烤鴨 * @email dengpbs@163.com * */ public class CareTaker { private EmpMemento memento; //備忘點較多時,將備忘錄壓棧,將多個備忘錄對象,序列化和持久化 實現撤回多步的操作 // private Stack stack = new Stack(); // private List list = new ArrayList(); public EmpMemento getMemento() { return memento; } public void setMemento(EmpMemento memento) { this.memento = memento; } }

      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

      Java備忘錄模式(Memento)

      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小時內刪除侵權內容。

      上一篇:敏捷需求之分層管理
      下一篇:實現Java集合迭代的高性能
      相關文章
      亚洲AV成人一区二区三区观看| 亚洲av无码专区国产不乱码| 亚洲精品tv久久久久久久久久| 亚洲欧美aⅴ在线资源| 亚洲大片在线观看| 亚洲日本va中文字幕久久| 国产亚洲成人久久| 亚洲成人高清在线| 亚洲精品无码激情AV| 亚洲国产精品一区二区九九 | 亚洲黄色在线播放| 亚洲免费精彩视频在线观看| 久久久久亚洲AV片无码| 亚洲成在人天堂在线| 久久亚洲国产精品成人AV秋霞 | 亚洲国产成人久久精品软件 | 噜噜噜亚洲色成人网站∨| 亚洲黄色网址在线观看| 亚洲高清无在码在线电影不卡| 亚洲精品中文字幕无乱码| 亚洲中文久久精品无码1| 亚洲妇女熟BBW| 亚洲日韩一中文字暮| 久久亚洲色WWW成人欧美| 亚洲国产香蕉人人爽成AV片久久| 亚洲日韩在线观看| 亚洲情XO亚洲色XO无码| 久久精品国产亚洲AV网站| 2022年亚洲午夜一区二区福利 | 亚洲入口无毒网址你懂的| 亚洲熟妇AV日韩熟妇在线| 久久久久久久久无码精品亚洲日韩| 国产精品久久久久久亚洲小说| 亚洲日本韩国在线| 亚洲精品高清国产一线久久| 亚洲AV日韩AV天堂一区二区三区| 亚洲视频免费在线播放| 亚洲国产日韩综合久久精品| 精品久久久久久亚洲综合网| 久久精品国产精品亚洲人人| 亚洲AV日韩AV天堂久久|