状态模式

Posted by 石玉军 on 2018-07-26

状态模式:允许一个对象在其内部状态改变时改变其行为。

举一个简单的小例子,我们在对一个小姐姐搭讪的时候,根据小姐姐的心情如何我们可能会得到不同的回复。

看一下类图

1

Girl:抽象状态接口:用于封装男孩对象搭讪小姐姐获得回复的接口
AngryGirl、HappyGirl:两个状态实现类。不同的状态就对应了男孩在不同时刻获得的回复。
Boy:持有一个状态实例。

看一下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public interface Girl {
public void say();
}

public class AngryGirl implements Girl {
@Override
public void say() {
System.out.println("滚");
}
}

public class HappyGirl implements Girl {
public void say(){
System.out.println("你好哦,小哥哥");
}
}

public class Boy {
private Girl girl;

public void say(){
this.girl.say();
}

public void setGirl(Girl girl){
this.girl=girl;
}
}

如此,Boy持有不同状态的Girl对象时获取的回复是不同的,这样就实现了一个简单的状态模式。