備忘錄模式是一種行為型設(shè)計(jì)模式,它允許在不破壞封裝性的前提下捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。這樣以后就可以將該對(duì)象恢復(fù)到原先保存的狀態(tài)。
備忘錄模式通常包括三個(gè)角色:原發(fā)器(Originator)、備忘錄(Memento)和負(fù)責(zé)人(Caretaker)。原發(fā)器是需要被保存狀態(tài)的對(duì)象,備忘錄保存了原發(fā)器的狀態(tài),而負(fù)責(zé)人負(fù)責(zé)保存和恢復(fù)備忘錄。
在Java中實(shí)現(xiàn)備忘錄模式非常簡(jiǎn)單,我們可以先定義原發(fā)器和備忘錄類(lèi):
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;
}
}
然后我們可以定義一個(gè)負(fù)責(zé)人類(lèi)來(lái)管理備忘錄:
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);
}
}
在這個(gè)例子中,我們可以通過(guò)調(diào)用Originator的setState方法來(lái)改變其狀態(tài),通過(guò)saveStateToMemento方法保存狀態(tài),通過(guò)getStateFromMemento方法恢復(fù)狀態(tài)。Caretaker可以通過(guò)addMemento方法添加備忘錄,通過(guò)getMemento方法獲取備忘錄。
現(xiàn)在我們可以編寫(xiě)一個(gè)簡(jiǎn)單的Demo來(lái)測(cè)試備忘錄模式:
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());
}
}
輸出結(jié)果為:
Current State: State #4
First saved State: State #2
Second saved State: State #3
現(xiàn)在讓我們看看在Android開(kāi)發(fā)中如何使用備忘錄模式。
在Android中,備忘錄模式通常用于保存和恢復(fù)Activity的狀態(tài)。Activity是一個(gè)非常重要的組件,它通常包含用戶輸入、UI狀態(tài)和其他重要數(shù)據(jù)。當(dāng)Activity被系統(tǒng)銷(xiāo)毀并重新創(chuàng)建時(shí),它的狀態(tài)會(huì)丟失,這會(huì)對(duì)用戶體驗(yàn)產(chǎn)生負(fù)面影響。為了解決這個(gè)問(wèn)題,Android提供了一種保存Activity狀態(tài)的機(jī)制——保存實(shí)例狀態(tài)(SaveInstanceState)。
保存實(shí)例狀態(tài)允許在Activity被銷(xiāo)毀時(shí)保存其狀態(tài),以便在Activity重新創(chuàng)建時(shí)恢復(fù)狀態(tài)。它基于備忘錄模式實(shí)現(xiàn),系統(tǒng)會(huì)自動(dòng)為Activity創(chuàng)建一個(gè)Bundle對(duì)象,并在Activity被銷(xiāo)毀時(shí)將該Bundle對(duì)象保存起來(lái)。當(dāng)Activity重新創(chuàng)建時(shí),系統(tǒng)會(huì)將保存的Bundle對(duì)象傳遞給Activity,并允許Activity從中恢復(fù)其狀態(tài)。
下面是一個(gè)簡(jiǎn)單的例子,演示了如何使用保存實(shí)例狀態(tài)保存和恢復(fù)Activity的狀態(tài):
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);
}
}
在這個(gè)例子中,我們使用了onSaveInstanceState方法保存Activity的狀態(tài),使用了onCreate方法恢復(fù)Activity的狀態(tài)。當(dāng)Activity被銷(xiāo)毀時(shí),系統(tǒng)會(huì)調(diào)用onSaveInstanceState方法,并將Bundle對(duì)象作為參數(shù)傳遞給該方法。我們可以在該方法中將需要保存的狀態(tài)存儲(chǔ)到Bundle對(duì)象中。當(dāng)Activity重新創(chuàng)建時(shí),系統(tǒng)會(huì)調(diào)用onCreate方法,并將保存的Bundle對(duì)象作為參數(shù)傳遞給該方法。我們可以在該方法中從Bundle對(duì)象中恢復(fù)狀態(tài)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-415164.html
總結(jié)一下,在Java中實(shí)現(xiàn)備忘錄模式非常簡(jiǎn)單,只需要定義原發(fā)器、備忘錄和負(fù)責(zé)人三個(gè)類(lèi)即可。在Android開(kāi)發(fā)中,備忘錄模式通常用于保存和恢復(fù)Activity的狀態(tài)。Android提供了一個(gè)保存實(shí)例狀態(tài)的機(jī)制,允許在Activity被銷(xiāo)毀時(shí)保存其狀態(tài),并在Activity重新創(chuàng)建時(shí)恢復(fù)其狀態(tài)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-415164.html
到了這里,關(guān)于23種設(shè)計(jì)模式-備忘錄模式(Android應(yīng)用場(chǎng)景介紹)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!