1.状态模式简介:
状态模式中的行为是由状态来决定的,不同的状态会有不同的行为。状态模式是平行的、不可替换的,这一点还是与策略模式有区别的。策略模式的行为是彼此独立,可相互替换的。
状态模式中的行为是由状态来决定的,不同的状态会有不同的行为。状态模式是平行的、不可替换的,这一点还是与策略模式有区别的。策略模式的行为是彼此独立,可相互替换的。
public interface UserState {
// 转发
void forward(Context context);
// 评论
void comment(Context context);
}
public class LogoutState implements UserState {
public LogoutState(){}
@Override
public void forward(Context context) {
gotoLoginActivity(context);
}
@Override
public void comment(Context context) {
gotoLoginActivity(context);
}
private void gotoLoginActivity(Context context){
Intent intent = new Intent(context, LoginActivity.class);
context.startActivity(intent);
}
}
public class LoginState implements UserState {
@Override
public void forward(Context context) {
Toast.makeText(context,"转发微博",Toast.LENGTH_LONG).show();
}
@Override
public void comment(Context context) {
Toast.makeText(context,"评论",Toast.LENGTH_LONG).show();
}
}
public class LoginContext {
UserState userState= new LogoutState();
private LoginContext(){}
public static LoginContext getInstance(){
return LoginHolder.instance;
}
public void setUserState(UserState userState){
this.userState = userState;
}
private static class LoginHolder{
private static final LoginContext instance = new LoginContext();
}
public void forward(Context context){
userState.forward(context);
}
public void comment(Context context){
userState.comment(context);
}
}
LoginContext.getInstance().setUserState(new LoginState());
LoginContext.getInstance().setUserState(new LogoutState());