19、行为型模式-备忘录设计模式

2021-07-26  本文已影响0人  日落_3d9f

备忘录设计模式(Memento Pattern)

应用场景

角色

备忘录设计模式

需求背景

小滴课堂 - 二当家小D 开发了一个游戏存档功能 拳皇97,无限生命,每次快要死的的时候就恢复成刚开始的状态

使用备忘录设计模式帮他完成

代码:
角色发起者:

public class RoleOriginator {
    /**
     * 生命力,会下降
     */
    private int live = 100;
    /**
     * 攻击力,会上涨
     */
    private int attack = 50;

    public int getLive() {
        return live;
    }

    public void setLive(int live) {
        this.live = live;
    }

    public int getAttack() {
        return attack;
    }

    public void setAttack(int attack) {
        this.attack = attack;
    }

    public void display(){
        System.out.println("开始=========");
        System.out.println("生命力:"+live);
        System.out.println("攻击力:"+attack);
        System.out.println("结束=========");
    }

    public void fight(){
        //攻击力会上涨
        this.attack = attack+2;
        //打架生命力会下降
        this.live = live - 10;

    }
    /**
     * 保存快照,存储状态
     * @return
     */
    public RoleStateMemento saveState(){
        return new RoleStateMemento(live,attack);
    }
    /**
     * 恢复
     */
    public void recoveryState(RoleStateMemento memento){
        this.attack = memento.getAttack();
        this.live = memento.getLive();
    }
}

角色快照:

public class RoleStateMemento {
    /**
     * 生命力,会下降
     */
    private int live;
    /**
     * 攻击力,会上涨
     */
    private int attack ;
    public RoleStateMemento(int live, int attack) {
        this.live = live;
        this.attack = attack;
    }
    public int getLive() {
        return live;
    }
    public void setLive(int live) {
        this.live = live;
    }
    public int getAttack() {
        return attack;
    }
    public void setAttack(int attack) {
        this.attack = attack;
    }
}

管理者:

public class RoleStateCaretaker {
    private RoleStateMemento memento;
    public RoleStateMemento getMemento() {
        return memento;
    }
    public void setMemento(RoleStateMemento memento) {
        this.memento = memento;
    }
}

Main函数:

public class Main {

    public static void main(String[] args) {
        RoleOriginator role = new RoleOriginator();
        role.display();
        role.fight();
        role.display();

        System.out.println("保存上面的快照");
        RoleStateCaretaker caretaker = new RoleStateCaretaker();
        caretaker.setMemento(role.saveState());

        role.fight();
        role.fight();
        role.fight();
        role.fight();
        role.display();

        System.out.println("准备恢复快照");
        role.recoveryState(caretaker.getMemento());
        role.display();
    }
}

执行结果:

开始=========
生命力:100
攻击力:50
结束=========
开始=========
生命力:90
攻击力:52
结束=========
保存上面的快照
开始=========
生命力:50
攻击力:60
结束=========
准备恢复快照
开始=========
生命力:90
攻击力:52
结束=========

优点

缺点

上一篇 下一篇

猜你喜欢

热点阅读