首先状态模式,我在工作中前端看的比较多,可能是因为同事都是大佬,搞后端的顺手搞搞前端。
举个超简单🌰例子,又叫做状态机模式
if(xxxx)
{
......
}else{
......
}else{
......
}
改成状态模式就是:
if(...)
{
....
};
if(...)
{
....
};
if(...)
{
....
};
适用场景
1) 行为随状态改变而改变的场景
2) 一个操作中含有庞大的多分支结构,并且这些分支取决于对象的状态
简单来说:就是电商场景,加入购物车,下单,不同用户对应不同的状态。
public abstract class State { // 状态基类 1.访客状态 2.登陆状态 3.验证状态
private AppContext context;
public void setContext(AppContext context) {
this.context = context;
}
public AppContext getContext() {
return context;
}
abstract void favourite();
abstract void updatePwd();
}
// state1
public class GuestState extends State {
@Override
void favourite() {
forwardToLoginPage();
this.getContext().favourite();
}
@Override
void updatePwd() {
forwardToLoginPage();
this.getContext().updatePwd();
}
private void forwardToLoginPage() {
System.out.println("跳转到登陆页面");
this.getContext().setState(AppContext.STATE_LOGIN);
}
}
//state2
public class LoginState extends State {
@Override
void favourite() {
System.out.println("登陆成功,跳转到首页");
System.out.println("收藏成功!");
}
@Override
void updatePwd() {
System.out.println("修改安全信息,需要再次验证您的身份!");
this.getContext().setState(AppContext.STATE_REAUTH);
this.getContext().updatePwd();
}
}
// state3
public class ReauthState extends State {
@Override
void favourite() {
System.out.println("收藏成功!");
}
@Override
void updatePwd() {
System.out.println("密码修改成功!");
}
}