• 【设计模式】18、备忘录模式


     1 package com.shejimoshi.behavioral.Memento;
     2 
     3 
     4 /**
     5  * 功能:游戏角色
     6  * 时间:2016年3月6日下午9:39:18
     7  * 作者:cutter_point
     8  */
     9 public class GameRole
    10 {
    11     private int attackPower;    //攻击力
    12     private int blood;    //血量
    13     private int defense;    //防御力
    14     
    15     public void getInitState()
    16     {
    17         attackPower = 100;
    18         blood = 100;
    19         defense = 100;
    20     }
    21     
    22     public void display()
    23     {
    24         System.out.println("攻击力:" + attackPower + "	生命力:" + blood + "	防御力:" + defense);
    25     }
    26     
    27     //保存当前存储点
    28     public Memento saveState()
    29     {
    30         return new Memento(attackPower, blood, defense);
    31     }
    32     
    33     public void recoveryState(Memento memento)
    34     {
    35         this.attackPower = memento.getAttackPower();
    36         this.blood = memento.getBlood();
    37         this.defense = memento.getDefense();
    38     }
    39     
    40     public void fight()
    41     {
    42         this.attackPower -= 40;
    43         this.blood -= 40;
    44         this.defense -= 60;
    45     }
    46 }
     1 package com.shejimoshi.behavioral.Memento;
     2 
     3 
     4 /**
     5  * 功能:存储状态管理者
     6  * 时间:2016年3月6日下午10:10:23
     7  * 作者:cutter_point
     8  */
     9 public class RoleStateCaretaker
    10 {
    11     private Memento memento;
    12 
    13     public Memento getMemento()
    14     {
    15         return memento;
    16     }
    17 
    18     public void setMemento(Memento memento)
    19     {
    20         this.memento = memento;
    21     }
    22     
    23 }
     1 package com.shejimoshi.behavioral.Memento;
     2 
     3 
     4 /**
     5  * 功能:游戏存储点,备忘录
     6  * 时间:2016年3月6日下午9:46:03
     7  * 作者:cutter_point
     8  */
     9 public class Memento
    10 {
    11     private int attackPower;    //攻击力
    12     private int blood;    //血量
    13     private int defense;    //防御力
    14     
    15     public Memento(int attackPower, int blood, int defense)
    16     {
    17         this.attackPower = attackPower;
    18         this.blood = blood;
    19         this.defense = defense;
    20     }
    21 
    22     public int getAttackPower()
    23     {
    24         return attackPower;
    25     }
    26 
    27     public void setAttackPower(int attackPower)
    28     {
    29         this.attackPower = attackPower;
    30     }
    31 
    32     public int getBlood()
    33     {
    34         return blood;
    35     }
    36 
    37     public void setBlood(int blood)
    38     {
    39         this.blood = blood;
    40     }
    41 
    42     public int getDefense()
    43     {
    44         return defense;
    45     }
    46 
    47     public void setDefense(int defense)
    48     {
    49         this.defense = defense;
    50     }
    51     
    52 }
     1 package com.shejimoshi.behavioral.Memento;
     2 
     3 
     4 /**
     5  * 功能:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先的状态
     6  * 适用:必须保存一个对象在某一个时刻的状态,这样以后需要时它才能恢复到先前的状态
     7  *             如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象封装信
     8  * 时间:2016年3月6日下午8:58:55
     9  * 作者:cutter_point
    10  */
    11 public class Test
    12 {
    13     public static void main(String[] args)
    14     {
    15         //开启游戏,初始化状态
    16         GameRole gr = new GameRole();
    17         gr.getInitState();//初始化状态
    18         gr.display();
    19         
    20         //保存进度点
    21         RoleStateCaretaker rsc = new RoleStateCaretaker();
    22         rsc.setMemento(gr.saveState());
    23         
    24         //大战boss
    25         gr.fight();
    26         gr.display();
    27         
    28         //恢复状态
    29         gr.recoveryState(rsc.getMemento());
    30         gr.display();
    31         
    32     }
    33 }
    攻击力:100	生命力:100	防御力:100
    攻击力:60	生命力:60	防御力:40
    攻击力:100	生命力:100	防御力:100
    

      

  • 相关阅读:
    方法重载与方法重写的概念和区别(转载)
    sql exist 和not exist(转载)
    SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思 sql server 2005 2008
    sql中的isnull
    sql中unique和distinct
    SQLServer中的Merge使用
    SQL Server系统表sysobjects介绍与使用
    sql select as
    存储过程SET XACT_ABORT ON
    SQL Server之存储过程基础知识
  • 原文地址:https://www.cnblogs.com/cutter-point/p/5248850.html
Copyright © 2020-2023  润新知