日常开发中,登录和未登录两种状态分别有不同的操作,比如登录后才能评论、收藏、支付购买和编辑资料等操作。我们网购时看到心仪的商品,如果处于登录状态,可以加购物车或直接购买,否则会跳转到登录页面,登录后再继续执行先前的动作。这里涉及的状态有两种,即登录和未登录。行为有两种,即加购物车和直接购买。
如果使用 if-else 语句实现,代码如下。
public void addShopping() {
if(未登录){
System.out.println("去登录");
return;
}
System.out.println("加入购物车!");
}
public void buy(){
if(未登录){
System.out.println("去登录");
return;
}
System.out.println("直接购买!");
}
以上代码是比较常用的,可以看出每个操作都需要判断用户是否处于登录状态。简单的情况下这样做没什么问题,也省去了状态类,但是如果这是一个庞大的系统。那就有必要斟酌是否使用状态模式了。
下面使用状态模式来实现这个逻辑,代码如下。
首先创建抽象状态角色 UserState 类,用来定义不同状态下需要执行的方法。
public abstract class UserState {
public AppContext getContext() { <