登錄註冊模塊、狀態保持模塊

登錄的方式

1.賬號登錄

使用在app上註冊的賬號和密碼進行登錄,登錄成功改變本地登錄狀態。

2.快捷登錄

使用QQ、微信進行快捷登錄,登錄成功改變本地登錄狀態。

登錄狀態管理

使用狀態模式進行登錄狀態管理,在用戶登錄和未登錄的情況下,對於同一事件處理行爲是不一樣的。在一些依賴狀態的操作,如果用戶是登錄狀態,則進行直接操作,如果不是登錄轉態那就不能進行直接操作。減少if-else邏輯,增強代碼的課拓展性和可維護性。

1.定義狀態接口

在接口中定義依賴登錄相關狀態的操作

import android.content.Context;

/**
 * Created by Shinlone on 2016/6/14.
 * 定義依賴狀態的操作,在這裏主要有登錄狀態和未登錄狀態會拓展此接口
 * 後期可以根據此接口實現一些其他轉態,比如已經登錄但限制操作的狀態
 */
public interface UserState {

    /**
     * 購買操作
     * @param context
     */
    public void buy(Context context);

    /**
     *評論操作
     * @param context
     */
    public void comment(Context context);

    /**添加其他與狀態相關的接口**/
}

2.實現狀態接口

實現UserState接口,分別構建登錄狀態和未登錄狀態

登錄狀態實現

import android.content.Context;

/**
 * 已經登錄狀態
 * Created by Shinlone on 2016/6/14.
 */
public class LoginedState implements UserState {
    @Override
    public void buy(Context context) {//可以正常購買
//        具體操作
    }

    @Override
    public void comment(Context context) {//可以正常評論
//        具體操作

    }
}

未登錄狀態實現

import android.content.Context;

/**
 * Created by Shinlone on 2016/6/14.
 */
public class LogoutState implements UserState {
    @Override
    public void buy(Context context) {//註銷狀態下不能進行購買操作
//        具體操作,比如跳出登錄

    }

    @Override
    public void comment(Context context) {

    }
}

狀態管理實現

運用單例模式進行全局的狀態管理,默認狀態爲未登錄狀態,並提供獲取實例和切換狀態的方法。

import android.content.Context;

/**
 * Created by Shinlone on 2016/6/14.
 * 用戶狀態管理
 */
public class LoginContext {

    //默認狀態爲未登錄狀態
    UserState mState = new LogoutState();

    static LoginContext sLoginContext = new LoginContext();

    private LoginContext() {
    }

    /**
     * 獲取操作實例
     *
     * @return
     */
    public static LoginContext getsLoginContext() {
        return sLoginContext;
    }

    /**
     * 切換轉態
     *
     * @param mState 傳入狀態
     */
    public void setState(UserState mState) {
        this.mState = mState;
    }


    public void buy(Context context) {//當前狀態購物操作
        mState.buy(context);
    }

    public void comment(Context context) {//當前狀態的評論操作
        mState.comment(context);
    }

}

狀態管理器使用

登錄轉態默認爲未登錄轉態,當用戶登錄成功後先保存用戶token及用戶信息然後將狀態切換至已經登錄狀態;在token超時的情況下先把狀態切換至未登錄狀態。具體使用代碼如下:

未登錄狀態

LoginContext.getsLoginContext().setState(new LogoutState());//切換至未登錄轉態,用戶超時切換至此狀態
LoginContext.getsLoginContext().buy(Activity.clsss);//執行購物操作不會直接購物,跳至登錄界面

登錄狀態

LoginContext.getsLoginContext().setState(new LoginedState());//切換至登錄狀態,登錄成功數據保存後切換至此狀態
LoginContext.getsLoginContext().buy(Activity.clsss);//執行購物操作跳轉至訂單生成頁面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章