Java笔记-Java中备忘录模式

首先设计模式代表外招功法,是外招的模板,个人觉得他是为面向对象7个原则而准备的:

面向对象程序设计要考虑7个原则:

单一职责原则:设计目的单一的类;

开放封闭原则:对扩展开发,对修改封闭;

李氏替换原则:子类可以替换父类;

依赖倒置原则:要依赖于抽象,不依赖于具体,面向接口的编程;

接口隔离原则:使用多个专用的接口比使用单一的接口要好;

组合重用原则:尽可能使用组合,而非继承;

迪米特原则:一个对象尽可能少的了解其他对象。

通过这7个原则,创建起来的设计模式。

桥接模式的基本的概念参照C++设计模式的博文:

https://blog.csdn.net/qq78442761/article/details/96147238

在这里我举个Java的例子,用Java来实现下备忘录模式。

备忘录模式适合模拟游戏存档的功能,在此使用Java模拟下游戏存档:

UML图如下:

Java笔记-Java中备忘录模式

 

这里简单解释下,Game可以输出SaveFile这个存档,有一个控制类叫Controller可以保存这个存储为List,从而可以对保存的进行进度进行回滚。

比如一个战士在100级和101级,和102级都有存档,现在打Boss死了,会自动退到他的101级存档重新开始:

结构如下:

Java笔记-Java中备忘录模式

 源码如下:

Controller.java

package cn.it1995;

import java.util.ArrayList;
import java.util.List;

public class Controller {

    private List<SaveFile> saveFileList = new ArrayList<SaveFile>();

    public void add(SaveFile saveFile){

        saveFileList.add(saveFile);
    }

    public SaveFile get(Integer index){

        return saveFileList.get(index);
    }
}

Game.Java

package cn.it1995;

public class Game {

    private String status;

    public void setStatus(String status){

        this.status = status;
    }

    public String getStatus(){

        return this.status;
    }

    public SaveFile saveStatusToFile(){

        return new SaveFile(status);
    }

    public void setStatusFromFile(SaveFile saveFile){

        status = saveFile.getFileContent();
    }
}

SaveFile.java

package cn.it1995;


public class SaveFile {

    private String fileContent;

    public SaveFile(String fileContent){

        this.fileContent = fileContent;
    }

    public String getFileContent() {

        return fileContent;
    }
}

Main.Java

package cn.it1995;

public class Main {

    public static void main(String[] args) {

        Game game = new Game();
        Controller controller = new Controller();
        game.setStatus("{'name':'warrior', 'level':100}");
        controller.add(game.saveStatusToFile());
        game.setStatus("{'name':'warrior', 'level':101}");
        controller.add(game.saveStatusToFile());
        game.setStatus("{'name':'warrior', 'level':102}");
        controller.add(game.saveStatusToFile());

        //回退到战士的第一个存单
        game.setStatusFromFile(controller.get(0));
        System.out.println(game.getStatus());
    }
}

运行截图:

Java笔记-Java中备忘录模式

 Controller中的值:

Java笔记-Java中备忘录模式

 

源码打包下载地址:

https://github.com/fengfanchen/Java/tree/master/JavaMementoPattern

上一篇:牛客多校1、Game of Swapping Numbers


下一篇:C++五子棋(六)——游戏结束