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());
}
......
}
以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());
}
......
}
相关文章推荐
- Android设计模式系列(5)--SDK源码之备忘录模式
- Android 设计模式之备忘录模式
- Android设计模式应用--备忘录模式
- java/android 设计模式学习笔记(21)---备忘录模式
- Android设计模式(十五)--备忘录模式
- Android设计模式系列(5)--SDK源码之备忘录模式
- 【设计模式与Android】备忘录模式——在齐太史简
- Java/Android 设计模式系列(21)--备忘录模式
- Android设计模式-备忘录模式
- Android编程设计模式之备忘录模式详解
- Android设计模式系列(5)--备忘录模式
- Android设计模式之(12)----备忘录模式
- Android 设计模式之观察者模式
- Android 设计模式实战 单例模式
- Android开发设计模式03
- [Android]GOF23种设计模式 & Android中的设计模式
- 设计模式_Memento_备忘录模式
- Android设计模式系列之工厂方法模式
- android的四种设计模式
- 设计模式五 监听器模式(android) & 代理模式(ios)