23种设计模式-备忘录模式(Android应用场景介绍)

备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

备忘录模式通常包括三个角色:原发器(Originator)、备忘录(Memento)和负责人(Caretaker)。原发器是需要被保存状态的对象,备忘录保存了原发器的状态,而负责人负责保存和恢复备忘录。

在Java中实现备忘录模式非常简单,我们可以先定义原发器和备忘录类:

public class Originator {
    private String state;

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

    public Memento saveStateToMemento() {
        return new Memento(state);
    }

    public void getStateFromMemento(Memento memento) {
        state = memento.getState();
    }
}

public class Memento {
    private String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }
}

然后我们可以定义一个负责人类来管理备忘录:

public class Caretaker {
    private List<Memento> mementos = new ArrayList<>();

    public void addMemento(Memento memento) {
        mementos.add(memento);
    }

    public Memento getMemento(int index) {
        return mementos.get(index);
    }
}

在这个例子中,我们可以通过调用Originator的setState方法来改变其状态,通过saveStateToMemento方法保存状态,通过getStateFromMemento方法恢复状态。Caretaker可以通过addMemento方法添加备忘录,通过getMemento方法获取备忘录。

现在我们可以编写一个简单的Demo来测试备忘录模式:

public class MementoPatternDemo {
    public static void main(String[] args) {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();

        originator.setState("State #1");
        originator.setState("State #2");
        caretaker.addMemento(originator.saveStateToMemento());
        originator.setState("State #3");
        caretaker.addMemento(originator.saveStateToMemento());
        originator.setState("State #4");

        System.out.println("Current State: " + originator.getState());
        originator.getStateFromMemento(caretaker.getMemento(0));
        System.out.println("First saved State: " + originator.getState());
        originator.getStateFromMemento(caretaker.getMemento(1));
        System.out.println("Second saved State: " + originator.getState());
    }
}

输出结果为:

Current State: State #4
First saved State: State #2
Second saved State: State #3

现在让我们看看在Android开发中如何使用备忘录模式。

在Android中,备忘录模式通常用于保存和恢复Activity的状态。Activity是一个非常重要的组件,它通常包含用户输入、UI状态和其他重要数据。当Activity被系统销毁并重新创建时,它的状态会丢失,这会对用户体验产生负面影响。为了解决这个问题,Android提供了一种保存Activity状态的机制——保存实例状态(SaveInstanceState)。

保存实例状态允许在Activity被销毁时保存其状态,以便在Activity重新创建时恢复状态。它基于备忘录模式实现,系统会自动为Activity创建一个Bundle对象,并在Activity被销毁时将该Bundle对象保存起来。当Activity重新创建时,系统会将保存的Bundle对象传递给Activity,并允许Activity从中恢复其状态。

下面是一个简单的例子,演示了如何使用保存实例状态保存和恢复Activity的状态:

public class MainActivity extends AppCompatActivity {
    private static final String KEY_TEXT = "text_key";
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.edit_text);

        if (savedInstanceState != null) {
            String text = savedInstanceState.getString(KEY_TEXT);
            editText.setText(text);
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        String text = editText.getText().toString();
        outState.putString(KEY_TEXT, text);
    }
}

在这个例子中,我们使用了onSaveInstanceState方法保存Activity的状态,使用了onCreate方法恢复Activity的状态。当Activity被销毁时,系统会调用onSaveInstanceState方法,并将Bundle对象作为参数传递给该方法。我们可以在该方法中将需要保存的状态存储到Bundle对象中。当Activity重新创建时,系统会调用onCreate方法,并将保存的Bundle对象作为参数传递给该方法。我们可以在该方法中从Bundle对象中恢复状态。

总结一下,在Java中实现备忘录模式非常简单,只需要定义原发器、备忘录和负责人三个类即可。在Android开发中,备忘录模式通常用于保存和恢复Activity的状态。Android提供了一个保存实例状态的机制,允许在Activity被销毁时保存其状态,并在Activity重新创建时恢复其状态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值