1.定义
对于某个操作,由于其状态的不同,表现出的行为会不同(如遥控器进行音量增加的操作,在电视是开机状态下是可以调节音量的,而在关机状态不会有任何反应)
2.示例

public class User {
OperateFunction operateFunction = new LogoutState();
/**
* 设置用户状态
* @param operateFunction
*/
public void setState(OperateFunction operateFunction) {
this.operateFunction = operateFunction;
}
public void commit() {
operateFunction.commit();
}
public void foward() {
operateFunction.foward();
}
}
public interface OperateFunction {
void commit();
void foward();
}
public class LoginState implements OperateFunction{
@Override
public void commit() {
System.out.println("评论");
}
@Override
public void foward() {
System.out.println("转发");
}
}
public class LogoutState implements OperateFunction{
@Override
public void commit() {
System.out.println("去登录");
}
@Override
public void foward() {
System.out.println("去登录");
}
}
public class Client {
public static void main(String[] args) {
User user = new User();
user.commit();//请登录
user.foward();//请登录
//设置登录状态
user.setState(new LoginState());
user.commit();//评论
}
}
3.使用场景
Android系统的wifi设置页面
4.总结
状态设计模式是在特定场景下,减少if...else的判断逻辑,增加代码的可维护性和扩展性
网友评论