登录注册模块、状态保持模块

登录的方式

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);//执行购物操作跳转至订单生成页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值