java设计模式_备忘录模式

package com.wangbiao.design.memento;

/**
 * 
 * @Title: GameRole.java
 * @Package com.wangbiao.design.memento
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-22 上午11:52:44 
 * @version V1.0
 */
public class GameRole {
    
    private String name;
    private int attackNum;
    private int bloodNum;
    
    public GameRole() {
        // TODO Auto-generated constructor stub
    }
    
    public GameRole(String name,int attackNum,int bloodNum) {
        this.name = name;
        this.attackNum = attackNum;
        this.bloodNum = bloodNum;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAttackNum() {
        return attackNum;
    }
    public void setAttackNum(int attackNum) {
        this.attackNum = attackNum;
    }
    public int getBloodNum() {
        return bloodNum;
    }
    public void setBloodNum(int bloodNum) {
        this.bloodNum = bloodNum;
    }
    
    public GameRole initRole(){
        return new GameRole("Enchanter", 100, 100);
    }
    
    //save data into Memento
    public Memento saveRoleInfo(){
        return new Memento(this.attackNum,this.bloodNum);
    }

    //get the old role info
    public boolean getBeforeRoleInfo(Memento memento){
        
        if(memento != null){
            
            this.attackNum = memento.getAttackNum();
            this.bloodNum = memento.getBloodNum();
            return true;
            
        }
        
        return false;
    }
    
    public void fightWithBoss(){
        System.out.println("figth with boss");
        this.attackNum = this.attackNum/5;
        this.bloodNum  = this.bloodNum/5;
    }
    
    public void displayRoleInfo(){
        System.out.println("攻击指数:" +this.attackNum +" ----"+ "血指数:"+this.bloodNum);
    }
}

package com.wangbiao.design.memento;

/**
 * 
 * @Title: Memento.java
 * @Package com.wangbiao.design.memento
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-22 下午12:11:12 
 * @version V1.0
 */
public class Memento {
    
    private int attackNum;
    private int bloodNum;
    
    public Memento() {
        // TODO Auto-generated constructor stub
    }
    
    public Memento(int attackNum,int bloodNum) {
        this.attackNum = attackNum;
        this.bloodNum = bloodNum;
    }
    
    public int getAttackNum() {
        return attackNum;
    }
    public void setAttackNum(int attackNum) {
        this.attackNum = attackNum;
    }
    public int getBloodNum() {
        return bloodNum;
    }
    public void setBloodNum(int bloodNum) {
        this.bloodNum = bloodNum;
    }
    
    

}

package com.wangbiao.design.memento;

/**
 * 
 * @Title: RoleCaretaker.java
 * @Package com.wangbiao.design.memento
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-22 下午12:11:18 
 * @version V1.0
 */
public class RoleCaretaker {

    private Memento memento;

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }
    
    
    
}

/**
 * @Title: Client.java
 * @Package com.wangbiao.design.memento
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-22 下午12:11:03 
 * @version V1.0
 */
package com.wangbiao.design.memento;

/**
 * @Title: Client.java
 * @Package com.wangbiao.design.memento
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-22 下午12:11:03 
 * @version V1.0
 */
public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        GameRole gameRole = new GameRole();
        gameRole = gameRole.initRole();
        gameRole.displayRoleInfo();
        
        // store GameRole info to RoleCaretaker
        RoleCaretaker caretaker = new RoleCaretaker();
        caretaker.setMemento(gameRole.saveRoleInfo());
        
        //fight with boss
        gameRole.fightWithBoss();
        gameRole.displayRoleInfo();
        
        // get the old role info
        gameRole.getBeforeRoleInfo(caretaker.getMemento());
        gameRole.displayRoleInfo();
        
        // result 
        /*
         攻击指数:100 ----血指数:100
        figth with boss
        攻击指数:20 ----血指数:20
        攻击指数:100 ----血指数:100
        */
        
    }

}
时间: 2024-10-28 11:37:51

java设计模式_备忘录模式的相关文章

大话设计模式_备忘录模式(Java代码)

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 简单描述:一个Memento类,代表Originator中要备份的属性.Originator负责生成备份和还原备份,CareTaker负责存储备份 大话设计模式中的截图: 例子代码: Memento类: 1 package com.longsheng.memento; 2 3 public class Memento { 4 5 private String sta

折腾Java设计模式之备忘录模式

原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's internal state allowing the object to be restored to this state later. 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态. 所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个

JAVA设计模式之 备忘录模式【Memento Pattern】

一.概述 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在以后将对象恢复至原先保存的状态.它是一种对象行为型模式. 二.适用场景 1.类似于撤销功能的实现,保存一个对象在某一时间的部分状态或全部状态,当以后需要它时就可以恢复至先前的状态. 2. 对对象历史状态的封装.避免将对象的历史状态的实现细节暴露给外界. 三.UML类图 四.参与者 1.Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内

Java设计模式之备忘录模式

本文继续23种设计模式系列之备忘录模式. 我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状态.比如,我们使用Eclipse进行编程时,假如编写失误(例如不小心误删除了几行代码),我们希望返回删除前的状态,便可以使用Ctrl+Z来进行返回.下象棋的时候,可以反悔.这时我们便可以使用备忘录模式来实现. 定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样就可以将该对象恢复到原先保存的状态 角色 发起人:记录当前时刻的内部状态,负责定义哪些

java设计模式9.备忘录模式、访问者模式、调停者模式

备忘录模式 备忘录模式又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态快照的对象.备忘录的用意是在不破坏封装的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态,备忘录模式常与命令模式和迭代子模式一起使用. 访问者模式 访问者的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变.访问者模式使适用于数据结构相对未定的系统,它把数据结构和作用于结构之上的操作解耦. 抽象访问者角色

Java设计模式应用——备忘录模式

备忘录模式主要用于存档.游戏中我们打boss前总会存档,如果打boss失败,则读取存档,重新挑战boss. 可以看出来,备忘录模式一般包括如下数据结构 1. 存档文件:用于恢复备份场景的必要数据: 2. 存档管理器:用于管理存档,包括存档的读写与展示: 3. 被存档的对象. 下面以射击游戏的存档来举例: 1. 射击选手 package com.coshaho.learn.memorandum; // 射击手 public class Shooter { // 血量 private int blo

Java 设计模式_代理模式(2016-08-19)

概念: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 就是一个人或者机构代表另一个人或者机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 类图: 在代理模式中的角色: ● 抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象. ● 目标对象角色:定义了代理对象所代表的目标对象. ● 代理对象角色:代理对象内部含有目标对象的

java设计模式_桥接模式

现在的手机,按照操作系统分,有ios,有android,还有window phone等. 如果是按软件来分的话,就有通讯录,游戏等. 按继承的思维来考虑的话,如下: 但是问题来了,如果是按照手机品牌来分的话,增加一个新的手机品牌的话,意味着不仅要增加手机品牌,还要增加改手机品牌的通讯录和游戏. 若按照手机软件来分的话,同样,增加一个新的软件的话,意味着不仅要增加新的软件,还要增加各个品牌手机对应的通讯录和游戏. 通过桥接模式的话,若增加软件,则只需要增加软件即可,若增加品牌,只需增加品牌即可.

java设计模式_建造者模式

/**  *   */ package com.wangbiao.design.builder; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /**  * @Title: Product.java  * @Package com.wangbiao.design.builder  * @Description: TODO   * @author wangbiao     * @date