备忘录模式和封装的违规通常指的是在使用备忘录模式时,由于需要获取对象的私有状态,而直接访问该对象的私有成员变量,导致了封装的违规。下面是一个代码示例,展示了如何解决这个问题。
// 备忘录类
class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
// 原始对象类
class Originator {
private String state;
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public Memento saveStateToMemento() {
return new Memento(state);
}
public void restoreStateFromMemento(Memento memento) {
state = memento.getState();
}
}
// 管理者类
class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
// 示例代码
public class Main {
public static void main(String[] args) {
Originator originator = new Originator();
originator.setState("State 1");
// 将状态保存到备忘录
Memento memento = originator.saveStateToMemento();
Caretaker caretaker = new Caretaker();
caretaker.setMemento(memento);
// 修改状态
originator.setState("State 2");
// 从备忘录中恢复状态
originator.restoreStateFromMemento(caretaker.getMemento());
System.out.println("Current State: " + originator.getState()); // 输出: Current State: State 1
}
}
在上面的示例中,原始对象类Originator
中的私有状态state
被封装起来,外部无法直接访问。通过saveStateToMemento
方法将状态保存到备忘录中,通过restoreStateFromMemento
方法从备忘录中恢复状态。这样,在使用备忘录模式时,就不需要直接访问对象的私有成员变量,从而遵守了封装的原则。
上一篇:备忘录模式