先貼代碼有空來寫內容。 備忘錄1 測試類 備忘錄2 測試類 memento3 ...
先貼代碼有空來寫內容。
備忘錄1
1 //簡單的備忘錄,只可以記錄上一次修改前的狀態,實現撤回一次的操作。 2 class Student{ 3 private String name; 4 private String age; 5 private String gender; 6 //在Student類中直接設立一個Student實例,用於存儲該類對象的上一個狀態 7 private Student memento=null; 8 //構造函數就不啰嗦了 9 public Student(){} 10 public Student(String n,String a,String g){ 11 name = n; 12 age = a; 13 gender = g; 14 } 15 //在調用可能改變類屬性的函數時,要調用saveMemento以備份修改前的實例。 16 public void setName(String n){ 17 saveMemento(); 18 name = n; 19 } 20 public String getName(){ 21 return name; 22 } 23 //和上面一樣就不羅嗦了 24 public void setAge(String a){ 25 saveMemento(); 26 age = a; 27 } 28 public String getAge(){ 29 return age; 30 } 31 public void setGender(String g){ 32 saveMemento(); 33 gender = g; 34 } 35 public String getGender(){ 36 return gender; 37 } 38 //new 一個本類實例,用於備份當前實例 39 private void saveMemento(){ 40 memento = new Student(this.name,this.age,this.gender); 41 } 42 //返回備份 43 public Student getMemento(){ 44 return memento; 45 } 46 public String toString(){ 47 return "name: "+name+" age: "+age+" gender: "+gender; 48 } 49 }
測試類
1 public class Test{ 2 public static void main(String[] args){ 3 Student tom = new Student("Tom","16","m"); 4 5 System.out.println("初始信息:"+tom); 6 //調用set函數,tom發生了改變 7 tom.setGender("f"); 8 System.out.println("修改後信息:"+tom); 9 //tom回到改變前的狀態 10 tom = tom.getMemento(); 11 System.out.println("撤回到修改前:"+tom); 12 13 14 System.out.println("初始信息:"+tom); 15 tom.setName("Jarry"); 16 System.out.println("修改後信息:"+tom); 17 tom = tom.getMemento(); 18 System.out.println("撤回到修改前:"+tom); 19 } 20 }
備忘錄2
1 //這個備忘錄可以實現多次撤回。 2 import java.util.Stack; 3 class Student{ 4 private String name; 5 private String age; 6 private String gender; 7 //在Student類中直接設立一個存儲Student實例的棧,用於存儲該類對象的備份 8 private Stack<Student> memento = null; 9 //構造函數就不啰嗦了 10 public Student(){} 11 public Student(String n,String a,String g){ 12 name = n; 13 age = a; 14 gender = g; 15 memento = new Stack<Student>(); 16 } 17 //在調用可能改變類屬性的函數時,要調用saveMemento以備份修改前的實例。 18 public void setName(String n){ 19 saveMemento(); 20 name = n; 21 } 22 public String getName(){ 23 return name; 24 } 25 //和上面一樣就不羅嗦了 26 public void setAge(String a){ 27 saveMemento(); 28 age = a; 29 } 30 public String getAge(){ 31 return age; 32 } 33 public void setGender(String g){ 34 saveMemento(); 35 gender = g; 36 } 37 public String getGender(){ 38 return gender; 39 } 40 //將實例的當前狀態push到備忘錄中 41 private void saveMemento(){ 42 memento.push(new Student(this.name,this.age,this.gender)); 43 } 44 //這裡不再返回一個新的Student,而是pop出備忘錄中的實例,用它的屬性給本this的屬性賦值 45 public Student getMemento(){ 46 Student preMemento = memento.pop(); 47 name = preMemento.getName(); 48 age = preMemento.getAge(); 49 gender = preMemento.getGender(); 50 return this; 51 } 52 public String toString(){ 53 return "name: "+name+" age: "+age+" gender: "+gender; 54 } 55 }
測試類
public class Test{ public static void main(String[] args){ Student tom = new Student("Tom","16","m"); System.out.println("初始信息:"+tom); //調用set函數,tom發生了改變 tom.setGender("f"); System.out.println("修改後信息:"+tom); tom.setName("Jarry"); System.out.println("修改後信息:"+tom); tom.setAge("17"); System.out.println("修改後信息:"+tom); tom.setName("haha"); System.out.println("修改後信息:"+tom); //tom回到改變前的狀態 System.out.println("撤回到修改前:"+tom.getMemento()); System.out.println("撤回到修改前:"+tom.getMemento()); System.out.println("撤回到修改前:"+tom.getMemento()); System.out.println("撤回到修改前:"+tom.getMemento()); } }
memento3