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

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

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

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

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

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

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

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

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

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

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

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

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

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

UML图如下:

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

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

结构如下:

源码如下:

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());}
}

运行截图:

Controller中的值:

源码打包下载地址:

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

Java笔记-Java中备忘录模式相关推荐

  1. Java多线程编程中Future模式的详解

    转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...

  2. Java笔记(学习中。。)

    Java笔记 eclipse的使用 常用的dos指令 预备知识 基本语法 变量 关于字符型 关于String 进制转换 运算符 流程控制 数组 数组的内存解析: 数组的Arrays工具类 面向对象 对 ...

  3. 工厂模式 java好处_java中工厂模式的优缺点有哪些

    java中工厂模式的优缺点有哪些 发布时间:2020-12-03 15:15:07 来源:亿速云 阅读:79 作者:Leah 这篇文章将为大家详细讲解有关java中工厂模式的优缺点有哪些,文章内容质量 ...

  4. Java笔记-JNI中Java与C语言解决中文乱码问题

    目录 基本概念 演示过程 基本概念 这里我把他总结成4个步骤: 1. 找类,Java的String: 2. 找函数String类的方法,成员函数: 3. 设置要转换的字符和编码: 4. 程序生成编码后 ...

  5. Java笔记-Java日常笔记-Java核心语言-史上最全Java笔记-Java烂笔头-实时更新(~v~)

    阿一的日常Java笔记,实时更新,有什么问题可以留言交流一下,大家一起共同进步!!! 1.Java基础 1.1.基本语法 1.1.1.关键字 ​ 定义:被java赋予特殊含义的字符串(单词): ​ 关 ...

  6. java笔记——Java常用类

    目录 目录 Java常用类目标 1.1内部类 1.2成员内部类 1.3静态内部类 1.4匿名内部类 2.Object类 2.1getClass()方法 2.2hasCode() 2.3toString ...

  7. 【学习笔记】设计模式-备忘录模式(Memento)

    文章目录 0 设计模式 1 备忘录模式 2 实现思路 3 需要的类 4 具体实现 4.1 Memento(备忘录) 4.2 Originator(目标对象) 4.3 CareTaker(管理者) 4. ...

  8. Java笔记——Java多线程~

    多线程 内容来自博客~ 理解线程与进程 进程 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程:进程也是程序的一次执行过程,是系统运行程序的基本单位 ...

  9. Java笔记-Java中桥接模式

    最近在研究一个APP,逆向后发现貌似用了桥接模式,特意学习了下Java中的桥接模式. 关于C++的桥接链接如下: https://blog.csdn.net/qq78442761/article/de ...

最新文章

  1. 网络工程师_想要记录下来的一些题_1
  2. 对象④for in 循环
  3. amd核芯显卡控制面板自定义分辨率_玩家 | 独立显卡和核芯显卡哪个更香?
  4. android域账号认证失败,绕过域账户认证失败锁定次数限制的技巧
  5. opencv学习笔记2--存取图像元素
  6. 大数据学习笔记57:Java代码操作HBase
  7. alwayson高可用组_AlwaysOn可用性组–简化工作的好奇心–第1部分
  8. 这些数据库领域的大事你知道多少?
  9. 萤石云 UIKit Javascript 使用
  10. 32位CPU最多支持4G内存是怎么算出来的?(解惑篇)
  11. (总结1)多机器人系统动态任务分配
  12. 字符图片分割研究小结(搬运、整理、分类、汇总)(自用,持续更新中)
  13. java中栈的两种实现
  14. 移动设备管理软件优劣,南京烽火星空来判别
  15. 学习Docker之Docker初体验 简单用例---SpringBoot集成Docker的部署、发布与应用
  16. cpp enum enum class
  17. C语言函数大全-- o 开头的函数
  18. 研究生常用的几种风险评估方法-专家调查法、蒙特卡洛模拟法、计划评审技术、敏感性分析法、决策树法、影响图法、模糊综合评价方法
  19. Python生成素描图
  20. 八股文之linux中redis常用命令

热门文章

  1. 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制
  2. Appium运行时,error: Logcat capture failed: spawn ENOENT的解决办法
  3. Android 百度推送使用总结
  4. oracle逻辑结构(2)
  5. nginx的rewrite 参数和例子
  6. Mysql5.0中文乱码解决方案
  7. 有个程序媛女朋友是一种什么样的感觉?
  8. *和**在Python中意味着什么?它与指针和地址有关吗?
  9. 超级玛丽2014怀旧版发布
  10. 对 飞秋 程序设计的一些新想法