文章目录
一、状态模式
示例代码如下
/**
* @Description: 抽象状态类
*/
public abstract class AbstractState {
abstract void Handle(Context context);
}
/**
* @Description: 环境类
*/
public class Context {
private AbstractState state;
public Context() {
state=new StateB();
}
public AbstractState getState() {
return state;
}
public void setState(AbstractState state) {
this.state = state;
}
public void handle(){
state.Handle(this);
}
}
/**
* @Description: 状态A
*/
public class StateA extends AbstractState{
void Handle(Context context) {
System.out.println("状态A");
context.setState(new StateB());
}
}
/**
* @Description: 状态B
*/
public class StateB extends AbstractState{
void Handle(Context context) {
System.out.println("状态B");
context.setState(new StateA());
}
}
测试一下
这里整一个场景,就是登陆,然后查询与写数据
/**
* @Description: 状态抽象类
*/
public abstract class AbstractStatus {
/**
* 查询
*/
abstract void search(AppContext context);
/**
* 写
*/
abstract void write(AppContext context);
}
/**
* @Description: 上下文类
*/
public class AppContext {
private AbstractStatus status;
public AppContext() {
status = new UnLoginStatus();
}
public AbstractStatus getStatus() {
return status;
}
public void setStatus(AbstractStatus status) {
this.status = status;
}
public void handle(){
status.search(this);
status.write(this);
}
}
/**
* @Description: 登录状态
*/
public class LoginStatus extends AbstractStatus{
void search(AppContext context) {
System.out.println("登录了然后查询");
}
void write(AppContext context) {
System.out.println("登录了然后写数据");
}
}
/**
* @Description: 未登录状态
*/
public class UnLoginStatus extends AbstractStatus{
void search(AppContext context) {
System.out.println("未登录");
LoginStatus loginStatus = new LoginStatus();
context.setStatus(loginStatus);
System.out.println("为查询数据已登录");
loginStatus.search(context);
}
void write(AppContext context) {
System.out.println("未登录");
LoginStatus loginStatus = new LoginStatus();
context.setStatus(loginStatus);
System.out.println("为写数据已登录");
loginStatus.write(context);
}
}
测试一下