爲什麼說Memento在不破壞封裝的情況下完成自己的工作,而我可以實現簡單的方式,但也不會違反封裝? Memento有什麼用途? 我有一個示例程序,它將在用戶按下保存按鈕時保存學生的詳細信息,並在用戶按下撤消按鈕時撤消該操作。下面
示例代碼實現,而無需使用Memento模式:
Student.java上述爲什麼使用紀念圖案可以更輕鬆地完成?
public class Student
{
private String name;
private String gender;
private int age;
private Contact contact;
public Student(String name, String gender, int age, Contact contact)
{
this.name = name;
this.gender = gender;
this.age = age;
this.contact = contact;
}
//getter and setter
}
Main.java
public class Main extends javax.swing.JFrame implements DocumentListener
{
private Student sCopy, student;
private void btnUndoActionPerformed(java.awt.event.ActionEvent evt)
{
txtName.setText(sCopy.getName());
txtGender.setText(sCopy.getGender());
txtAge.setText(sCopy.getAge() + "");
txtPhone.setText(sCopy.getContact().getPhoneNo());
txtEmail.setText(sCopy.getContact().getEmail());
txtAddress.setText(sCopy.getContact().getAddress());
student = sCopy;
}
private void btnSaveActionPerformed(java.awt.event.ActionEvent evt)
{
sCopy = student;
Contact c = new Contact(txtPhone.getText(), txtEmail.getText(), txtAddress.getText());
student = new Student(txtName.getText(), txtGender.getText(), Integer.parseInt(txtAge.getText()), c);
}
示例代碼工作完美,但爲什麼我們需要紀念,同時它可以很容易地完成?我沒有看到上面執行紫羅蘭封裝的地方...
摘要
上面的方法是否違反封裝?如果不是,那麼Memento的目的是什麼?允許多個撤消?雖然上面的實現不允許多次撤消,但是也可以不使用記錄來完成。
您的版本將永遠只允許一次撤銷,而備忘錄模式可以允許潛在無限的撤銷和重做。 –
在您的代碼中,您只能撤銷一個單一版本(最後使用scopy變量)。使用Memento,您可以保存多種版本的學生並撤消每個版本。 – Dherik
現在我們暫時不在尋找多個撤消。 Memento的意圖是恢復狀態而不違反封裝,但是這個簡單的實現也沒有違反它? – Newbie