1. 定义
允许一个对象在其内部状态改变时改变它的行为, 这个对象看起来似乎修改了它的类
有效的替换充满在程序中的 ifelse 语句, 将不同条件下的行为封装在一个类里面, 再给这些类一个统一的父类来约束他们
2. 场景
2-1. 一个对象的行为取决于它的状态, 并且他必须在运行时刻根据状态改变它的行为
2-2. 一个操作中含有庞大的多分枝的条件语句, 并且这些分支依赖于该对象的状态, 这个状态通常用一个或多个枚举常量表示. 通常, 有多个操作包含这一相同的条件结构. 状态模式将每一个条件分支放入一个独立的类中, 这是得你可以根据对象自身的情况将对象的状态作为一个对象, 这一对象可以不依赖于其他对象而独立变化
2. 角色
2-1. 使用环境角色: 客户端需要的接口, 维护一个具体状态角色的实例, 这个实例来决定当前的状态
2-2. 抽象状态角色: 各个状态的接口或抽象类
2-3. 具体状态角色: 状态角色具体类
3-3. 实例
// 抽象状态角色
interface State {
public void shot();
}
// 非正常状态
public class NonormalState implements State {
public void shot(){
System.out.println("今天你投篮十中一");
}
}
// 正常状态
public class NormalState implements State {
public void shot(){
System.out.println("今天你投篮十中五");
}
}
// 超常状态
public class SuperState implements State {
public void shot(){
System.out.println("今天你投篮十中十");
}
}
// 使用环境角色
public class Player {
private State state = new NormalState(); // 默认正常状态
public void setState(State state) {
this.state = state;
}
public void shot() {
state.shot();
}
}
//
public class StateTest
{
public static void main(String[] args) {
Player player = new Player();
player.shot(); // 正常下投篮
player.setState(new NonormalState());
player.shot(); // 不正常下投篮
player.setState(new SuperState());
player.shot(); // 超常下投篮
}
}
允许一个对象在其内部状态改变时改变它的行为, 这个对象看起来似乎修改了它的类
有效的替换充满在程序中的 ifelse 语句, 将不同条件下的行为封装在一个类里面, 再给这些类一个统一的父类来约束他们
2. 场景
2-1. 一个对象的行为取决于它的状态, 并且他必须在运行时刻根据状态改变它的行为
2-2. 一个操作中含有庞大的多分枝的条件语句, 并且这些分支依赖于该对象的状态, 这个状态通常用一个或多个枚举常量表示. 通常, 有多个操作包含这一相同的条件结构. 状态模式将每一个条件分支放入一个独立的类中, 这是得你可以根据对象自身的情况将对象的状态作为一个对象, 这一对象可以不依赖于其他对象而独立变化
2. 角色
2-1. 使用环境角色: 客户端需要的接口, 维护一个具体状态角色的实例, 这个实例来决定当前的状态
2-2. 抽象状态角色: 各个状态的接口或抽象类
2-3. 具体状态角色: 状态角色具体类
3-3. 实例
// 抽象状态角色
interface State {
public void shot();
}
// 非正常状态
public class NonormalState implements State {
public void shot(){
System.out.println("今天你投篮十中一");
}
}
// 正常状态
public class NormalState implements State {
public void shot(){
System.out.println("今天你投篮十中五");
}
}
// 超常状态
public class SuperState implements State {
public void shot(){
System.out.println("今天你投篮十中十");
}
}
// 使用环境角色
public class Player {
private State state = new NormalState(); // 默认正常状态
public void setState(State state) {
this.state = state;
}
public void shot() {
state.shot();
}
}
//
public class StateTest
{
public static void main(String[] args) {
Player player = new Player();
player.shot(); // 正常下投篮
player.setState(new NonormalState());
player.shot(); // 不正常下投篮
player.setState(new SuperState());
player.shot(); // 超常下投篮
}
}