1.定义
对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。
2.场景
家里的吹风机有多个档,每个档级对应的风级不一样,可以用下面的代码进行模拟:
public class Blower {
public void blow() {
String state = "低档";
switch (state) {
case "低档":
System.out.println("吹冷风");
break;
case "中档":
System.out.println("吹中风");
break;
case "高档":
System.out.println("吹热风");
break;
default:
System.out.println("没有当前档级");
}
}
}
缺点:
(1) 存在大量的if else,可读性差
(2) 如果需要增加一个新的档级,就需要修改原有的代码
在这里可将不同的温度段定义为不同的状态,在这些状态中定义不同的行为。
2.1 定义不同的状态
public interface State {
void show();
}
public class LowState implements State {
@Override
public void show() {
System.out.println("低档 : 吹冷风");
}
}
public class MiddleState implements State {
@Override
public void show() {
System.out.println("中档: 吹中等风");
}
}
public class HighState implements State {
@Override
public void show() {
System.out.println("高档 : 吹热风");
}
}
2.2 状态改变行为
public class Blower {
private State state;
Blower(State state){
this.state = state;
}
public void setState(State state) {
this.state = state;
}
public void blow() {
state.show();
}
}
2.3 测试
public class TestState {
public static void main(String[] args) {
Blower blower = new Blower(new HighState());
blower.blow();
}
}
----------------------------console
高档 : 吹热风