Android开发经验谈Android开发Android技术知识

备忘录模式

2019-05-21  本文已影响8人  Jackson杰

一 定义

备忘录模式也是一种行为模式,该模式用于保存和恢复对象的状态,向我们提供了一种类似于“后悔药”的机制,一旦出现了操作失误,可以把存储的历史状态取回,即可回到以前的状态。备忘录模式需要被保存的对象状态不能被对象从外部访问。

定义:在不破坏封闭的前提下,捕获一个对象的内部内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存的状态。

二 模式结构


角色介绍:

三 实例

以一个保存用户信息为例,给用户信息设置一个初始状态,然后创建一个备份,存储备份,修改用户信息,然后再用备份还原到初始状态。
代码如下:

public class Memoto {

    // 用户名
    private String userName;
    // 密码
    private String password;
    // 电话号码
    private String phoneNumber;


    public Memoto(String username,String password, String phone){
        this.userName=username;
        this.password=password;
        this.phoneNumber=phone;
    }


    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

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

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}
public class UserInfoOriginator {

    // 用户名
    private String userName;
    // 密码
    private String password;
    // 电话号码
    private String phoneNumber;


    /**
     * 保存一个备忘录
     * @return 返回一个新的备忘录对象
     */
    public Memoto saveMemoto(){
        return new Memoto(userName,password,phoneNumber);
    }

    /**
     * 恢复备忘录对象
     * @param memoto
     */
    public void restoreMemoto(Memoto memoto){
        this.userName=memoto.getUserName();
        this.password=memoto.getPassword();
        this.phoneNumber=memoto.getPhoneNumber();
    }


    /**
     * 显示用户信息
     */
    public void show(){
        System.out.println("userName:"+userName);
        System.out.println("password:"+password);
        System.out.println("phone:"+phoneNumber);
    }


    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

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

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}
 // 创建Originator
        UserInfoOriginator originator=new UserInfoOriginator();
        // 创建管理者
        Caretaker caretaker=new Caretaker();

        originator.setUserName("Jackson");
        originator.setPassword("123456");
        originator.setPhoneNumber("18310056896");

        System.out.println("-----初始状态----");
        originator.show();

        // 保存状态
        caretaker.setMemoto(originator.saveMemoto());

        // 修改状态
        originator.setPassword("25268522");
        originator.setPhoneNumber("18598653256");
        System.out.println("-----修改后状态----");
        originator.show();

        //恢复状态
        originator.restoreMemoto(caretaker.getMemoto());
        System.out.println("-----回复后状态----");
        originator.show();
public class Caretaker {

    private Memoto mMemoto;

    public Memoto getMemoto() {
        return mMemoto;
    }

    public void setMemoto(Memoto memoto) {
        mMemoto = memoto;
    }
}

运行结果


四 优缺点

优点

缺点

上一篇下一篇

猜你喜欢

热点阅读