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