您的位置:首页 > 移动开发 > Android开发

Android和设计模式:备忘录模式

2011-08-26 09:52 387 查看
最近在继续iPhone业务的同时还需要重新拾起Android。在有些生疏的情况下,决定从Android源码中感悟一些Android的风格和方式。在学习源码的过程中也发现了一些通用的模式,希望通过一个系列的文章总结和分享下。 该模式在不破坏封装的情况下,捕捉一个对象的内部状态,这样就可以在之后恢复到该状态。对于Android来说,在横竖屏切换的时候就可能需要在切换前捕捉状态,这样在切换后就可以进行恢复。
以TimePicker为例,备忘录模式实现的类图如下:

其中,SavedState支持小时和分钟数的存储,这样就可以确保在一些关键节点前后保持状态一直。 主要代码如下: public class TimePicker extends FrameLayout { ......
/**
* Used to save / restore state of time picker
*/
private static class SavedState extends BaseSavedState { private final int mHour;
private final int mMinute; private SavedState(Parcelable superState, int hour, int minute) {
super(superState);
mHour = hour;
mMinute = minute;
}
private SavedState(Parcel in) {
super(in);
mHour = in.readInt();
mMinute = in.readInt();
} public int getHour() {
return mHour;
} public int getMinute() {
return mMinute;
} @Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeInt(mHour);
dest.writeInt(mMinute);
} public static final Parcelable.Creator<SavedState> CREATOR
= new Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
} public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}
@Override
protected Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
return new SavedState(superState, mCurrentHour, mCurrentMinute);
} @Override
protected void onRestoreInstanceState(Parcelable state) {
SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
setCurrentHour(ss.getHour());
setCurrentMinute(ss.getMinute());
}
......
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息