ToB企服应用市场:ToB评测及商务社交产业平台

标题: 23种设计模式之备忘录模式 [打印本页]

作者: 南七星之家    时间: 2024-12-13 19:53
标题: 23种设计模式之备忘录模式
1. 简介

备忘录模式(Memento Pattern) 是一种举动设计模式,它答应在不粉碎封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后可以将对象恢复到之前保存的状态。
比方,在文本编辑器软件中,用户大概会进行一系列的编辑操作,如输入笔墨、删除段落等。备忘录模式可以用来保存文本编辑器在各个操作阶段的状态,当用户想要撤销操作时,就可以利用保存的备忘录将文本恢复到之前的某个状态。
结构:

2. 代码

2.1 Order (原发器类)

  1. public class Order {
  2.     private String state;
  3.     public String getState() {
  4.         return state;
  5.     }
  6.     public Order(String state){
  7.         this.state = state;
  8.     }
  9. }
复制代码
2.2 Memento (备忘录类)

  1. public class Memento {
  2.     private String state;
  3.     public String getState() {
  4.         return state;
  5.     }
  6.     public void setState(String state) {
  7.         this.state = state;
  8.     }
  9.     public Order saveStateToOrder(){
  10.         return new Order(state);
  11.     }
  12.     public void getStateFromOrder(Order order){
  13.         state = order.getState();
  14.     }
  15. }
复制代码
2.3 Container (负责人类)

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. public class Container {
  4.      private List<Order> orderList = new ArrayList<>();
  5.      public void addOrder(Order order){
  6.          orderList.add(order);
  7.      }
  8.      public Order getOrder(int index){
  9.          return orderList.get(index);
  10.      }
  11. }
复制代码
2.4 Test (测试)

  1. public class Test {
  2.     public static void main(String[] args) {
  3.         Memento memento = new Memento();
  4.         Container container = new Container();
  5.         memento.setState("#1. 做饭");
  6.         container.addOrder(memento.saveStateToOrder());
  7.         memento.setState("#2. 炒菜");
  8.         container.addOrder(memento.saveStateToOrder());
  9.         memento.setState("#3. 吃饭");
  10.         container.addOrder(memento.saveStateToOrder());
  11.         System.out.println(memento.getState());
  12.         memento.getStateFromOrder(container.getOrder(0));
  13.         System.out.println("备忘录:" + memento.getState());
  14.         memento.getStateFromOrder(container.getOrder(1));
  15.         System.out.println("备忘录:" + memento.getState());
  16.         memento.getStateFromOrder(container.getOrder(2));
  17.         System.out.println("备忘录:" + memento.getState());
  18.     }
  19. }
复制代码
2.5 运行结果

  1. #3. 吃饭
  2. 备忘录:#1. 做饭
  3. 备忘录:#2. 炒菜
  4. 备忘录:#3. 吃饭
复制代码
3. 使用场景


需要留意的是,虽然备忘录模式提供了灵活的状态恢复机制,但也存在一些埋伏的问题。比方,它大概会导致资源斲丧增加,特殊是在需要保存大量状态的环境下。因此,在实际应用中需要权衡其利弊,并根据具体需求进行恰当的调解和优化
4. 优缺点


5. 总结

这里的例子与网上的不一样,这里可以实现多个回退

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4