美文网首页
Mememto Pattern

Mememto Pattern

作者: 杨志聪 | 来源:发表于2024-06-03 10:57 被阅读0次

目的

实现撤销编辑功能。在编辑文字、编辑图片、编辑视频等项目会用到。

代码实例

实现文章编辑的回退功能:

Article类:

package com.cong.designpattern.memento;

public class Article {
    private String content;
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public ArticleState createState() {
        return new ArticleState(this.content);
    }
    public void restoreState(ArticleState state) {
        this.content = state.getContent();
    }
}

ArticleState类:

package com.cong.designpattern.memento;

public class ArticleState {
    private String content;
    public ArticleState(String content) {
        this.content = content;
    }
    public String getContent() {
        return content;
    }
}

ArticleHistory类:

package com.cong.designpattern.memento;

import java.util.ArrayList;
import java.util.List;

public class ArticleHistory {
    private List<ArticleState> list;
    public ArticleHistory() {
        this.list = new ArrayList<>();
    }
    public void push(ArticleState state) {
        this.list.add(state);
    }
    public ArticleState pop() {
        int lastIndex = this.list.size() - 1;
        if (lastIndex < 0) return null;

        ArticleState state = this.list.get(lastIndex);
        this.list.remove(lastIndex);
        return state;
    }
}

测试代码:

package com.cong.designpattern;

import android.util.Log;

import com.cong.designpattern.memento.Article;
import com.cong.designpattern.memento.ArticleHistory;

public class Test {
    private static String TAG = "Test";

    public static void doTest() {
        Article article = new Article();
        ArticleHistory history = new ArticleHistory();

        article.setContent("a");
        history.push(article.createState());
        article.setContent("b");
        history.push(article.createState());
        article.setContent("c");

        article.restoreState(history.pop());

        Log.d(TAG, "doTest: "+ article.getContent());
    }
}

UML

Memento Pattern UML

相关文章

网友评论

      本文标题:Mememto Pattern

      本文链接:https://www.haomeiwen.com/subject/mkheqjtx.html