diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/memento/Article.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/memento/Article.java new file mode 100644 index 0000000..9d0874f --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/memento/Article.java @@ -0,0 +1,42 @@ +package top.fjy8018.designpattern.pattern.behavior.memento; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 文章,字段不宜过多,否则导致过大内存占用 + * + * @author F嘉阳 + * @date 2020/3/6 17:00 + */ +@Data +@AllArgsConstructor +public class Article { + + private String title; + + private String content; + + private String imgs; + + /** + * 保存 + * + * @return + */ + public ArticleMemento saveToMemento() { + ArticleMemento articleMemento = new ArticleMemento(this.title, this.content, this.imgs); + return articleMemento; + } + + /** + * 撤销 + * + * @param articleMemento + */ + public void undoFromMemento(ArticleMemento articleMemento) { + this.title = articleMemento.getTitle(); + this.content = articleMemento.getContent(); + this.imgs = articleMemento.getImgs(); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/memento/ArticleMemento.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/memento/ArticleMemento.java new file mode 100644 index 0000000..498f62a --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/memento/ArticleMemento.java @@ -0,0 +1,27 @@ +package top.fjy8018.designpattern.pattern.behavior.memento; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; +import org.springframework.binding.message.StateManageableMessageContext; + +/** + * 文章备忘录(快照) + * 快照不需要set方法,只能通过构造器注入 + *
+ * Spring工作流中源码 {@link StateManageableMessageContext#createMessagesMemento()}
+ *
+ * @author F嘉阳
+ * @date 2020/3/6 17:03
+ */
+@Getter
+@ToString
+@AllArgsConstructor
+public class ArticleMemento {
+
+ private String title;
+
+ private String content;
+
+ private String imgs;
+}
diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/memento/ArticleMementoManager.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/memento/ArticleMementoManager.java
new file mode 100644
index 0000000..9441ba1
--- /dev/null
+++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/memento/ArticleMementoManager.java
@@ -0,0 +1,27 @@
+package top.fjy8018.designpattern.pattern.behavior.memento;
+
+import java.util.Stack;
+
+/**
+ * 保存一个对象的某个状态,以便在适当的时候恢复对象
+ *
+ * @author F嘉阳
+ * @date 2020/3/6 17:04
+ */
+public class ArticleMementoManager {
+
+ /**
+ * 使用栈特性实现动作撤销
+ */
+ private final Stack