提交 aed20e66 编写于 作者: E ex_kongxiang

feat(备忘录模式):create

上级 8a75c0b8
package com.kongxiang.raindrop.dp.type.behavior.memento;
import lombok.ToString;
import java.util.List;
/**
* 游戏存档(Memento)
*
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
@ToString
public class GameMemento {
private int level;
private List<String> equipment;
public GameMemento(int level, List<String> equipment) {
this.level = level;
this.equipment = equipment;
}
public int getLevel() {
return level;
}
public List<String> getEquipment() {
return equipment;
}
}
package com.kongxiang.raindrop.dp.type.behavior.memento;
import java.util.LinkedList;
import java.util.List;
/**
* 历史备份(CareTaker)
* 管理备份
*
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
public class HistoryMemento {
private static final List<GameMemento> history = new LinkedList<>();
/**
* 保存存档(备忘录)
*/
public void addHistory(GameMemento game) {
history.add(game);
}
/**
* 选择指定的存档(备忘录)
*/
public GameMemento loadHistory(int index) {
return history.get(index);
}
public void list() {
history.forEach(System.out::println);
}
}
package com.kongxiang.raindrop.dp.type.behavior.memento;
import lombok.Getter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
/**
* 主机游戏(Originator)
*
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
@Getter
public class HostGame {
/**
* 人物登记
*/
private int level;
/**
* 装备
*/
private List<String> equipment;
/**
* 开始游戏 新开始
*/
public void newPlay() {
this.level = 0;
this.equipment = new ArrayList<>();
}
/*
*打怪
*/
public String attack() {
// 升级
level++;
return UUID.randomUUID().toString().substring(20,34)+ ":装备衣服 : level" + (level + 10 - (level % 10) + " 级 - " + ((int)(Math.random()*10 %3)+1) +"⭐品质" );
}
/**
* 拾取
*/
public void pickup(String equipment) throws Exception {
if (this.equipment.size() >= 30) {
throw new Exception("装备背包不足,请购买");
}
this.equipment.add(equipment);
}
/**
* 保存备份
*/
public GameMemento saveGame() {
List<String> backup = new LinkedList<>();
backup.addAll(this.equipment);
return new GameMemento(this.level, backup);
}
/**
* 加载之前的游戏备份
*/
public void loadGame(GameMemento gameMemento) {
this.level = gameMemento.getLevel();
this.equipment = gameMemento.getEquipment();
}
}
package com.kongxiang.raindrop.dp.type.behavior.memento;
/**
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
public class HostGamePlayerMain {
public static void main(String[] args) throws Exception {
HostGame player = new HostGame();
HistoryMemento history = new HistoryMemento();
// 新游戏刚入手,开始体验
player.newPlay();
// 打怪,升级,爆装备
String eq = player.attack();
// 拾取装备
player.pickup(eq);
eq = player.attack();
player.pickup(eq);
System.out.println("高等级极品装备");
// 备份
GameMemento gameMemento = player.saveGame();
history.addHistory(gameMemento);
for (int i = 0; i < 23; i++) {
System.out.println("打怪升级捡装备");
eq = player.attack();
player.pickup(eq);
// 每五次备份一次
if (i % 5 == 0) {
// 备份
gameMemento = player.saveGame();
history.addHistory(gameMemento);
}
}
System.out.println("---------- 当期的玩家数据 ------------");
System.out.println(" level:" + player.getLevel() );
System.out.println(" 装备列表 :" );
player.getEquipment().forEach(System.out::println);
System.out.println("-----------------------------------");
System.out.println("查看备份列表");
history.list();
System.out.println("回退到第3个存档,重新打boss");
GameMemento gameMemento1 = history.loadHistory(3-1);
player.loadGame(gameMemento1);
System.out.println("---------- 当期的玩家数据 ------------");
System.out.println(" level:" + player.getLevel() );
System.out.println(" 装备列表 :" );
player.getEquipment().forEach(System.out::println);
System.out.println("-----------------------------------");
System.out.println("查看备份列表");
history.list();
}
}
@startuml
'https://plantuml.com/sequence-diagram
skinparam linetype ortho
class Originator {
- state;
public changeState();
public Memento createMemento()
public void loadMemento(Memento)
}
class Memento {
- state...;
- setState(state);
- getState();
}
class CareTaker {
- List<Memento> list ;
- save(Memento)
- get():Memento
}
CareTaker o--> Memento
Originator --> Memento
@enduml
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册