Java策略模式实例

人的一生很短暂(回忆过去,珍惜现在,把握未来).代码实现“我们的过去和即将”
1.先定义一个接口 HalfLife 设定我们过去的这些年所经历的大事:
  • 小学
  • 初中
  • 高中
  • 大学
  • 工作
  • 结婚
  • 生子

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
/**
* Created by zhangfeng on 2016/10/19.
* 我们的过去和即将
*/
public interface HalfLife {
/**
* 小学
*/
void smallShool();
/**
* 初中
*/
void middleShool();
/**
* 高中
*/
void highShool();
/**
* 大学
*/
void university();
/**
* 工作
*/
void work();
/**
* 结婚
*/
void getMarried();
/**
* 生子
*/
void children();
/**
* 我们的前半生
*/
void halfLife();
}
2.实现HalfLife 分别回忆我的和媳妇的过去和即将
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
/**
* Created by zhangfeng on 2016/10/19.
* 我的过去和即将
*/
public class MyHalfLife implements HalfLife {
private String name;
public MyHalfLife(String name) {
this.name = name;
}
@Override
public void smallShool() {
Log.i("---","1995年XXX小学");
}
@Override
public void middleShool() {
Log.i("---","2001年XXX中学");
}
@Override
public void highShool() {
Log.i("---","2002年XXX高中");
}
@Override
public void university() {
Log.i("---","2007年XXX大学");
}
@Override
public void work() {
Log.i("---","20011年工作");
}
@Override
public void getMarried() {
Log.i("---","2016年结婚");
}
@Override
public void children() {
Log.i("---","2018年计划要小孩");
}
@Override
public void halfLife() {
smallShool();
middleShool();
highShool();
university();
work();
getMarried();
children();
}
}
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
/**
* Created by zhangfeng on 2016/10/19.
* 媳妇的过去和即将
*/
public class WifeHalfLife implements HalfLife {
private String name;
public WifeHalfLife(String name) {
this.name = name;
}
@Override
public void smallShool() {
Log.i("---","1997年XXX小学");
}
@Override
public void middleShool() {
Log.i("---","2003年XXX中学");
}
@Override
public void highShool() {
Log.i("---","2006年XXX高中");
}
@Override
public void university() {
Log.i("---","2009年XXX大学");
}
@Override
public void work() {
Log.i("---","20013年工作");
}
@Override
public void getMarried() {
Log.i("---","2016年结婚");
}
@Override
public void children() {
Log.i("---","2018年计划要小孩");
}
@Override
public void halfLife() {
smallShool();
middleShool();
highShool();
university();
work();
getMarried();
children();
}
}
3.叙述我们的过去和即将
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
/**
* Created by zhangfeng on 2016/10/19.
* 叙述我们的过去和即将
*/
public class WriteHalfLfie {
private HalfLife halfLife;
private String name;
/**
* 经历和内容都差不多的话,换个名字就是你过去和即将
* @param name
*/
public WriteHalfLfie(String name){
switch (name){
case "同事1":
halfLife = new WifeHalfLife(name);
break;
case "同事2":
halfLife = new MyHalfLife(name);
break;
default:
halfLife = new MyHalfLife(name);
break;
}
}
/**
* 获取我们的过去和即将
*/
public void getHalfLife(){
halfLife.halfLife();
}
}
把叙述内容封装在WriteHalfLfie中,减少了客户端与 WriteHalfLfie 的耦合,这样等我们要换小说的具体实现时,客户端不用修改代码。
4.测试
1
2
WriteHalfLfie writeHalfLfie=new WriteHalfLfie("张锋");
writeHalfLfie.getHalfLife();
把 WriteHalfLfie 类中的 default 设置为 WifeHalfLife ,即 媳妇的过去和即将:
1
2
3
4
5
6
7
8
public WriteHalfLfie(String name){
switch (name){
//...省略掉不关键的内容
default:
halfLife = new WifeHalfLife(name);
break;
}
}
结果输出:媳妇的过去和即将
1
2
3
4
5
6
7
1997年XXX小学
2003年XXX中学
2006年XXX高中
2009年XXX大学
20013年工作
2016年结婚
2018年计划要小孩
结果输出:我的过去和即将
1
2
3
4
5
6
7
1995年XXX小学
2001年XXX中学
2002年XXX高中
2007年XXX大学
20011年工作
2016年结婚
2018年计划要小孩