java之备忘录模式(大话设计模式)

     2022-03-26     717

关键词:

备忘录模式,给笔者的感觉,我们在实际开发中很少用到,至少笔者是没用到过。一般在游戏后台开发应该会经常用到吧!当然这只是

笔者的推断。先看下类图

大话设计模式-类图

技术分享图片

再继续看下Demo吧

/**
 * 需要保存的进度信息类
 */
public class RoleSateMemento{

    private Integer atk;

    private Integer vit;

    private Integer attack;

    public RoleSateMemento(Integer atk, Integer vit, Integer attack) {
        super();
        this.atk = atk;
        this.vit = vit;
        this.attack = attack;
    }

    public Integer getAtk() {
        return atk;
    }

    public void setAtk(Integer atk) {
        this.atk = atk;
    }

    public Integer getVit() {
        return vit;
    }

    public void setVit(Integer vit) {
        this.vit = vit;
    }

    public Integer getAttack() {
        return attack;
    }

    public void setAttack(Integer attack) {
        this.attack = attack;
    }
}
/**
 * 存储进度类
 */
public class RolerStateCaretaker {

    private RoleSateMemento roleSateMemento;

    public RoleSateMemento getRoleSateMemento() {
        return roleSateMemento;
    }

    public void setRoleSateMemento(RoleSateMemento roleSateMemento) {
        this.roleSateMemento = roleSateMemento;
    }
}
/**
 * 角色类
 */
public class RolerInfo {

    private Integer atk;

    private Integer vit;

    private Integer attack;

    public RolerInfo(Integer atk, Integer vit, Integer attack) {
        super();
        this.atk = atk;
        this.vit = vit;
        this.attack = attack;
    }

    public static RolerInfo initRoler() {
        return new RolerInfo(100, 100, 100);
    }

    public void showState() {
        System.out.println("当前血量: " + vit);
        System.out.println("当前攻击力: " + atk);
        System.out.println("当前防御力: " + attack);
    }

    public RoleSateMemento saveRolerInfo() {
        return new RoleSateMemento(atk, vit, attack);
    }

    public void restoreMenmento(RoleSateMemento roleSateMemento) {
        this.vit = roleSateMemento.getVit();
        this.atk = roleSateMemento.getAtk();
        this.attack = roleSateMemento.getAttack();
    }

    public Integer getAtk() {
        return atk;
    }


    public void setAtk(Integer atk) {
        this.atk = atk;
    }


    public Integer getVit() {
        return vit;
    }


    public void setVit(Integer vit) {
        this.vit = vit;
    }


    public Integer getAttack() {
        return attack;
    }


    public void setAttack(Integer attack) {
        this.attack = attack;
    }
}
/**
 * 客户端
 */
public class Test {

    public static void main(String[] args) {
        RolerInfo role = RolerInfo.initRoler();
        System.out.println("----------大战BOSS之前----------");
        role.showState();

        //保持进度
        RolerStateCaretaker caretaker = new RolerStateCaretaker();
        caretaker.setRoleSateMemento(role.saveRolerInfo());

        //大战BOSS
        role.setAtk(0);
        role.setAttack(0);
        role.setVit(0);
        System.out.println("----------大战BOSS----------");
        role.showState();

        //恢复存档
        role.restoreMenmento(caretaker.getRoleSateMemento());
        System.out.println("----------恢复----------");
        role.showState();

    }
}

 

运行结果

----------大战BOSS之前----------
当前血量: 100
当前攻击力: 100
当前防御力: 100
----------大战BOSS----------
当前血量: 0
当前攻击力: 0
当前防御力: 0
----------恢复----------
当前血量: 100
当前攻击力: 100
当前防御力: 100

 

简单看下记忆类和负责保存记忆的类,其实就是几个属性,然后还有set,get方法,并不复杂,主要的逻辑还是在角色类里。笔者之前看大话设计模式时

一直误解为什么角色类里面的属性和记忆类里面的属性相同,而不让角色类继承记忆类呢? 后来仔细想下,原因是,角色里面有很多属性不需要保存。打个比方

角色的性别不会因为大战BOSS之后就变性,所以性别并不需要保存,所以这里没有用继承,记忆只是负责保存需要保存的属性。

以上是笔者对备忘录模式的理解,希望能帮助学习的小伙伴。另外笔者强烈推荐学习的小伙伴多看看大话设计模式,然后领悟其精髓,自己在手动写一次代码。

java之策略模式(大话设计模式)

温故而知新,每次读设计模式都会有不同的体验,坚持每天一个设计模式,直到熟练运用设计模式。策略模式定义了很多完成相同工作的算法,但实现不同,它可以以相同的方式调用所有的算法,减少了算法和调用算法的耦合。... 查看详情

java之状态模式(大话设计模式)

看过大话设计模式的小伙伴,都知道大话设计模式中的demo代码不是JAVA的,对于编程来说,设计模式不限于任何语言,讲述的是编程的思想。今天笔者再次看这篇文章时,看了下别人的博客对于设计模式的理解,希望能汲取点其... 查看详情

2018/12/10《大话设计模式》备忘录模式(代码片段)

 1:为什么要使用备忘录模式?  -定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。  -在平常的需要备忘/快照的模式中,经常需... 查看详情

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

原文地址:折腾Java设计模式之备忘录模式备忘录模式Withoutviolatingencapsulation,captureandexternalizeanobject‘sinternalstateallowingtheobjecttoberestoredtothisstatelater.在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状... 查看详情

java之模板模式(大话设计模式)

...用过,而且大家都比较喜欢这个模式,先看一下类图大话设计模式-类图作为一个程序员,不懂得“偷懒“,在笔者看来不是很合格哦!当我们编写程序时,发现很多个类所走的流程基本一致,只是少部分差异,这时我们就需要... 查看详情

java之命令模式(大话设计模式)

...比较频繁时,自然而然就用到命令模式。先看下类图大话设计模式-类图简单说下类图,最开始笔者看大话设计模式的时候也不是很喜欢看类图,主要原因是看不懂,后来当笔者第一次看完设计模式后,才真正意义上的理解类图... 查看详情

java之桥接模式(大话设计模式)

...它的实现部分分离,使它们都可以独立的变化。第一次看设计模式的时候,不是很清楚这句话的意思,随着笔者的不断开发,发现有一种场景,继承关系多了,不易于维护父类,而笔者认为桥接模式的出现很好的解决了这个问题... 查看详情

java之代理模式(大话设计模式)

...买可乐就是需要做的行为。这是笔者理解的代理模式大话设计模式-类图要想实现代理,那么代理类和被代理的类就都要实现一个共同的接口,就刚刚买可乐的例子,我和我的室友都可以买可乐。代理类可以动态的去做一些事情... 查看详情

java之抽象工厂模式(大话设计模式)

...们还是要吸取其思想而不是生搬硬套。来看下类图:大话设计模式-类图看类图已经很乱了,来简单的梳理下。我们只看接口,这样就不难看出实际上是抽象工厂生产抽象产品的过程,而具体实现都是各自的实现类来做。看下具... 查看详情

java之观察者模式(大话设计模式)

...利集合调取公共方法去完成相应的工作,先看下类图大话设计模式-类图基于类图笔者写了 查看详情

java之外观模式(大话设计模式)

外观设计模式,很多人都已经使用过,只是不知其名,一般一个很nice的系统,模块化做的都很不错,这样如果新来一个业务,只需要把各个模块组装起来就可以满足新的业务,从程序的角度来说,就是我们只需要开一个类,然... 查看详情

大话设计模式之简单工厂模式(代码片段)

大话设计模式——简单工厂模式--参考自《大话设计模式》需求现在有一个需求,实现一个简单的计算器对于一般的初学者来说可能会这么实现:publicclasscalculatepublicstaticvoidmain(String[]args)Scannercin=newScanner(System.in);System.out.println(&qu... 查看详情

大话设计模式之策略模式

策略模式  定义了一系列的算法,分别封装起来,让他们之间可以互相替换。此模式让算法的改变不会影响到使用算法的客户。  在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对... 查看详情

大话设计模式第八章之简单工厂模式

   简单工厂模式 工厂方法模式     packagecom.dp.factory;interfaceIFactory{CalculatorCreateCalculator();}classAddFactoryimplementsIFactory{@OverridepublicCalculatorCreat 查看详情

大话设计模式之简单工厂模式

简单工厂模式  最近朋友推荐了一本书《大话设计模式》,此书刚刚到,博主也还没开始看,希望以博文的方式与大家一起分享,一起学习.简单工厂模式,也就是说,到底要实列化谁,将来会不会增加实列化的对象,比如增加开根运算,... 查看详情

大话设计模式之桥接模式

桥接模式  将抽象部分与他的实现部分分离,使他们可以独立的变化  抽象与实现分离并不是说让抽象类与其派生类分离,因为这没有任何意义。实现是指抽象类和它的派生类用来实现自己的对象.桥接模式主要包含如下几... 查看详情

大话设计模式之代理模式(代码片段)

代理模式是为了隐藏真实对象,为其提供一种代理以控制对这个对象的访问。UML类图: 公用接口Subject类:1/**2*定义共有接口3*/4publicinterfaceSubject56voidresquest();7真实对象RealSubject类:1/**2*真实实现3*/4publicclassRealSubjectimplementsSubj... 查看详情

大话设计模式之组合模式

组合模式  将对象组合成树形结构以表示‘部分--整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性涉及到的角色描述  在组合模式结构图中包含如下几个角色:      ●&nbs... 查看详情