首先设计模式代表外招功法,是外招的模板,个人觉得他是为面向对象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