设计模式/行为型设计模式
简述
指在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态
UML图
代码
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 49 50 51 52 53 54 55 56 57 58 59 60
| @Getter @ToString(callSuper = true, includeFieldNames = true) public class MementoAnimal { private String color;
public MementoAnimal(String color) { this.color = color; } }
@Slf4j @Setter public class Parrot implements Animal { private String color;
public Parrot(String color) { this.color = color; }
public MementoAnimal createMemento() { return new MementoAnimal(color); }
public void restore(MementoAnimal mementoAnimal) { color = mementoAnimal.getColor(); }
@Override public void run() { log.debug("小鹦鹉 -- " + color); } }
@Data @ToString public class MementoManager { private MementoAnimal mementoAnimal; }
@Slf4j public class Client { public static void main(String[] args) { Parrot parrot = new Parrot(“黄色的”); parrot.run(); MementoAnimal parrotMemento = parrot.createMemento(); MementoManager manager = new MementoManager(); manager.setMementoAnimal(parrotMemento); log.error(" 备份信息: " + manager.toString()); parrot.setColor("粉色的"); parrot.run(); log.error(" 备份信息: " + manager.toString()); parrot.restore(manager.getMementoAnimal()); parrot.run(); } }
|