使用场景
需要保存某个场景在某个时刻的状态 一个对象不希望外界直接访问其内部对象,可以通过一个中介访问其内部对象
栗子:
public class NoteEditText extends EditText{
//笔记本编辑类
public NoteEditText(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public Memote createMemote(){
Memote memote=new Memote();
memote.text=this.getText().toString();
memote.cursor=getSelectionStart();
return memote;
}
public void restore(Memote memote){
setText(memote.text);
setSelection(memote.cursor);
}
}
//备忘录
public class Memote {
public String text;
public int cursor;
}
//负责管理memote对象
public class NoteCaretaker {
private static final int MAX=20;
ArrayList<Memote> mList=new ArrayList<Memote>(MAX);
int index=0;
public void savseMemote(Memote memote){
if(mList.size()>MAX){
mList.remove(0);
}
mList.add(memote);
index=mList.size()-1;
}
public Memote getPreMemote(){
index=index>0?--index:index;
return mList.get(index);
}
public Memote getNextMemote(){
index=index<mList.size()-1?++index:index;
return mList.get(index);
}
}
//主函数调用
public class MainActivity extends ActionBarActivity {
NoteEditText noteEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NoteCaretaker noteCaretaker=new NoteCaretaker();
@OnClick(R.id.lastButton)
public void onClick(View v) {
// TODO Auto-generated method stub
noteEditText.restore(noteCaretaker.getPreMemote()));
}
@OnClick(R.id.saveButton)
public void nextMemote() {
// TODO Auto-generated method stub
noteEditText.restore(noteCaretaker.getNextMemote());
}
@OnClick(R.id.saveButton)
public void saveNote(){
noteCaretaker.savseMemote(noteEditText.createMemote());
}
}
}
- 优点:提供可恢复的状态,方便回退
- 缺点:类的成员过多,会占用大量资源