20、状态模式(State)
核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。看图:
State类是个状态类,Context类可以实现切换,我们来看看代码:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
package
com.xtfggef.dp.state;
/**
* 状态类的核心类
* 2017-12-12
* @author fsj
*
*/
public
class
State {
private
String value;
public
String getValue() {
return
value;
}
public
void
setValue(String value) {
this
.value = value;
}
public
void
method1(){
System.out.println(
"execute the first opt!"
);
}
public
void
method2(){
System.out.println(
"execute the second opt!"
);
}
}
package
com.xtfggef.dp.state;
/**
* 状态模式的切换类 2012-12-1
* @author erqing
*
*/
public
class
Context {
private
State state;
public
Context(State state) {
this
.state = state;
}
public
State getState() {
return
state;
}
public
void
setState(State state) {
this
.state = state;
}
public
void
method() {
if
(state.getValue().equals(
"state1"
)) {
state.method1();
}
else
if
(state.getValue().equals(
"state2"
)) {
state.method2();
}
}
}
|
测试类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
class
Test {
public
static
void
main(String[] args) {
State state =
new
State();
Context context =
new
Context(state);
//设置第一种状态
state.setValue(
"state1"
);
context.method();
//设置第二种状态
state.setValue(
"state2"
);
context.method();
}
}
|
输出:
execute the first opt!
execute the second opt!