设计模式之备忘录模式(行为型)

爱谁谁
发布: 2025-09-13 08:46:25
原创
219人浏览过

一、模式定义

备忘录模式(Memento Pattern)是一种行为型设计模式,它在不破坏封装性的前提下,捕获并保存一个对象的内部状态,以便在未来将对象恢复到之前保存的状态。因此,备忘录模式也被称为快照模式(Snapshot Pattern)或Token模式。

二、模式角色

备忘录模式包含以下角色:

  • Originator(原发器):负责创建备忘录对象,并在需要时恢复状态。
  • Memento(备忘录):存储原发器的内部状态。
  • Caretaker(负责人):负责保存备忘录对象。

设计模式之备忘录模式(行为型)

三、模式分析

备忘录模式主要用于备份和回退操作,常见于软件的回退功能。通过备忘录模式,系统可以回退到某个特定的历史状态,提升用户体验。

备忘录对象用于存储另一个对象的内部状态快照,因此备忘录模式也被称为快照模式或Token模式。

典型代码如下:

原发器类:

public class Originator {
    private String state;

    public Originator() {}

    // 创建一个备忘录对象
    public Memento createMemento() {
        return new Memento(this);
    }

    // 根据备忘录对象恢复原发器状态
    public void restoreMemento(Memento m) {
        state = m.state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getState() {
        return this.state;
    }
}
登录后复制

备忘录类:

西亚购物系统 2004
西亚购物系统 2004

一套自选网上商城精美模版,自主商品管理,自行网店经营的网上商城平台,系统具有强大的商品管理、购物车、订单统计、会员管理等功能,同时拥有灵活多变的商品管理、新闻管理等功能,功能强劲的后台管理界面,无需登录FTP,通过IE浏览器即可管理整个网站。西亚购物平台经多方面权威调查和研究为您精心开发了很多特色实用功能。使商品展示、管理、服务全面升级。西亚购物平台为您提供了多款专业美观的店面样式、俱备完整的购物

西亚购物系统 2004 0
查看详情 西亚购物系统 2004
public class Memento {
    private String state;

    public Memento(Originator o) {
        state = o.state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getState() {
        return this.state;
    }
}
登录后复制

负责人类:

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

public class CareTaker {
    private List<Memento> mementoList = new ArrayList<Memento>();

    public void add(Memento state) {
        mementoList.add(state);
    }

    public Memento get(int index) {
        return mementoList.get(index);
    }
}
登录后复制

四、模式例子

以下是来自《设计模式》一书的例子:

原发器类,创建备忘录类:

package dp.memento;

public class UserInfoDTO {
    private String account;
    private String password;
    private String telNo;

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getTelNo() {
        return telNo;
    }

    public void setTelNo(String telNo) {
        this.telNo = telNo;
    }

    public Memento saveMemento() {
        return new Memento(account, password, telNo);
    }

    public void restoreMemento(Memento memento) {
        this.account = memento.getAccount();
        this.password = memento.getPassword();
        this.telNo = memento.getTelNo();
    }

    public void show() {
        System.out.println("Account: " + this.account);
        System.out.println("Password: " + this.password);
        System.out.println("TelNo: " + this.telNo);
    }
}
登录后复制

备忘录类,保存原发器类状态:

package dp.memento;

class Memento {
    private String account;
    private String password;
    private String telNo;

    public Memento(String account, String password, String telNo) {
        this.account = account;
        this.password = password;
        this.telNo = telNo;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getTelNo() {
        return telNo;
    }

    public void setTelNo(String telNo) {
        this.telNo = telNo;
    }
}
登录后复制

负责人类,创建备忘录:

package dp.memento;

public class Caretaker {
    private Memento memento;

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}
登录后复制

五、模式应用

备忘录模式在软件中广泛应用,包括:

  • 软件中的存档操作
  • Windows 中的 Ctrl + Z 撤销操作
  • 浏览器中的后退功能
  • 数据库的事务管理

以上就是设计模式之备忘录模式(行为型)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号