zoukankan      html  css  js  c++  java
  • Memento

    备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该状态恢复到原先保存的状态。

    要保存的细节封装到Memento中,哪一天要更改保存的细节也不用影响客户端了。

    备忘录模式所涉及的角色有三个:备忘录(Memento)角色、发起人(Originator)角色、负责人(Caretaker)角色。

     1 //备忘录,负责记录Originator的状态,并防止Originator以外其它对象访问。
     2 public class Memento {
     3 
     4     private int attack;
     5     private int defense;
     6 
     7     public Memento(int attack, int defense){
     8         this.attack = attack;
     9         this.defense = defense;
    10     }
    11 
    12     public int getAttack() {
    13         return attack;
    14     }
    15 
    16     public int getDefense() {
    17         return defense;
    18     }
    19 
    20 }
     1 //角色类
     2 public class Originator {
     3 
     4     private int attack;
     5     private int defense;
     6 
     7     public Originator(){
     8         attack = 100;
     9         defense = 50;
    10     }
    11     
    12     public int getAttack() {
    13         return attack;
    14     }
    15 
    16     public void setAttack(int attack) {
    17         this.attack = attack;
    18     }
    19 
    20     public int getDefense() {
    21         return defense;
    22     }
    23 
    24     public void setDefense(int defense) {
    25         this.defense = defense;
    26     }
    27 
    28     //保存角色状态
    29     public Memento createMemento(){
    30         return new Memento(attack, defense);
    31     }
    32     
    33     //恢复角色状态
    34     public void recoveryMemento(Memento memento){
    35         attack = memento.getAttack();
    36         defense = memento.getDefense();
    37     }
    38     
    39     public void show(){
    40         System.out.println("攻击力 : " + attack);
    41         System.out.println("防御力 : " + defense);
    42     }
    43 }
     1 //管理者,负责保存好Memento,不能对备忘录内容进行操作和检查。
     2 public class Caretaker {
     3 
     4     private Memento memento;
     5 
     6     public Memento getMemento() {
     7         return memento;
     8     }
     9 
    10     public void setMemento(Memento memento) {
    11         this.memento = memento;
    12     }
    13     
    14 }
     1     public static void main(String[] args) {
     2         Originator o = new Originator();
     3         o.setAttack(2000);
     4         o.setDefense(150);
     5         o.show();
     6         
     7         Caretaker c = new Caretaker();
     8         c.setMemento(o.createMemento());
     9         
    10         o.setAttack(50);
    11         o.setDefense(0);
    12         o.show();
    13         
    14         o.recoveryMemento(c.getMemento());
    15         o.show();
    16         
    17     }

    打印结果:

    攻击力 : 2000
    防御力 : 150
    攻击力 : 50
    防御力 : 0
    攻击力 : 2000
    防御力 : 150

  • 相关阅读:
    Flask发送邮件
    python 可调用对象之类实例
    flask 跨域请求
    flask登录插件 flask-login
    flask 更新数据库
    python事物管理及同步锁
    Django signals 信号作用及用法说明
    python中各个response使用
    Ntp时间服务器
    Iptables-主机防火墙设置
  • 原文地址:https://www.cnblogs.com/xuekyo/p/2611798.html
Copyright © 2011-2022 走看看