Luckylau's Blog

设计模式之状态模式

​ 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。也就是说将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用。在实际开发中,状态模式具有较高的使用频率,在工作流和游戏开发中状态模式都得到了广泛的应用。

​ 程序猿还是同一个人,但是同一个任务在不同的状态下,可能会达到不同的效果。早上上班的时候,休息了一夜,精力旺盛,程序猿能够高效码代码,bug也不多;当熬夜加班的时候,运转了一天的大脑无比疲惫,写出的代码常有bug出没;人和任务是相同的,是不变的部分;状态和效果是不同的,是变的部分。按照设计模式的套路,不变的和变化的是要分开来的,从而满足”开闭“原则,有利于扩展。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Developer {
private State state;
public Developer(State state) {
this.state = state;
}
public void setState(State state) {
this.state = state;
}
public void develop() {
state.coding();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public interface State {
void coding();
}
public class EffectiveState implements State {
public void coding() {
System.out.println("高效码代码,偶有bug,人非圣贤嘛~");
}
}
public class ExhaustedState implements State {
public void coding() {
System.out.println("加班熬夜码代码,专业写bug");
}
}
public class TianRenHeYiState implements State {
public void coding() {
System.out.println("写代码进入天人合一境界,仿佛三头六臂,码神附体");
}
}
1
2
3
4
5
6
7
8
9
10
public class Client {
public static void main(String[] args) {
Developer developer = new Developer(new EffectiveState());
developer.develop();
developer.setState(new ExhaustedState());
developer.develop();
developer.setState(new TianRenHeYiState());
developer.develop();
}
}
Luckylau wechat
如果对您有价值,看官可以打赏的!