您的位置:首页 > 其它

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

2016-07-17 05:18 204 查看

登录的方式

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);//执行购物操作跳转至订单生成页面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: