此实例是Android4.4数据连接部分,DataConnecton继承自StateMachine状态机类,StateMachine状态机类实现了State设计模式的应用,在WiFi、蓝牙、数据连接这三种网络连接的管理实现都使用了State设计模式。
图中看出,共定义了7种状态子类,都是DataConnecton的内部类,数据连接在六种状态中转换,DefaultState是作为其他六个子类的父状态类的,所谓父状态类,就是当子状态类无法处理(在processMessage方法中处理)时,就会交给父状态类来处理。状态的转换是通过DataConnecton的transitionTo()方法来设置的。
源代码(代码太多,只贴Context管理State的代码):
private DataConnection(PhoneBase phone, String name, int id, DcTrackerBase dct, DcTesterFailBringUpAll failBringUpAll, DcController dcc) { //[mr2] removed //setDbg(false); addState(mDefaultState); addState(mInactiveState, mDefaultState);//mDefaultState作为父状态 addState(mActivatingState, mDefaultState); addState(mRetryingState, mDefaultState); addState(mActiveState, mDefaultState); addState(mDisconnectingState, mDefaultState); addState(mDisconnectingErrorCreatingConnection, mDefaultState); setInitialState(mInactiveState);//设置初始状态 }
未完待续,有不对的地方,请指正。
原文:http://blog.csdn.net/canghai1129/article/details/41285533