(拾起.笔记)设计模式之备忘录模式

简介:

备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次回复到此状态,这有点像我们平时说的“后悔药”。备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露。
在不破坏封闭的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态,这样,以后就可以将该对象恢复到原先保存的状态。

使用场景:

1,需要保存一个对象在某一个时刻的状态或部分状态。
2,如果用一个接口来让其他对象得到这种状态,将会暴露对象的实现细节并破坏对象的封装性,一个对象不希望外界直接访问其内部状态,通过中间对象可以间接访问其内部状态。

示例代码:

这里有3个对象,分别为
Originator:发起者
Memoto:备忘录,存储数据的实体对象
Caretaker :备份存储

Originator:
class Originator{
    private String string ;
    private int in ;

    public void setString(String string) {
        this.string = string;
    }
    public void setIn(int in) {
        this.in = in;
    }
    
    public Memoto createMemoto(){
        Memoto memoto = new Memoto(string,in);
        return memoto;
    }
    
    public void restore(Memoto memoto){
        this.string = memoto.string;
        this.in = memoto.in;
    }
    
    @Override
    public String toString() {
        return "[ string = " + string + " in = " + in +" ]";
    }
}
Memoto:
class Memoto{
    
    public String string;
    public int in ;
    
    public Memoto(String string, int in) {
        this.string = string;
        this.in = in;
    }
}
Caretaker:
class Caretaker{
    private Memoto memoto ;
    
    public void saveMemoto(Memoto memoto){
        this.memoto = memoto;
    }
    
    public Memoto getMemoto(){
        return memoto;
    }
    
}
使用:
public static void main(String[] args) {
        //加载
        Originator originator = new Originator();
        originator.setString("11");
        originator.setIn(11);

        //备忘
        Caretaker caretaker = new Caretaker();
        caretaker.saveMemoto(originator.createMemoto());

        //重新加载,取出备忘录
        Originator originator2 = new Originator();
        originator2.restore(caretaker.getMemoto());

         //打印:[ string = 11 in = 11 ]       
        System.out.println(originator2.toString());
    }
参考:

《Android源码设计模式解析与实战》

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复

    作者信息

    标签TAG

    相关文章