策略模式

介绍

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

用途

主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。

源码

1
2
3
public interface Gun {
public void openFire();
}
1
2
3
4
5
6
public class Awm implements Gun {
@Override
public void openFire() {
System.out.println("Awm 火力覆盖中……");
}
}
1
2
3
4
5
6
public class Akm implements Gun {
@Override
public void openFire() {
System.out.println("Akm 火力覆盖中……");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class choose {

Gun wuqi;

public choose(Gun gun) {
super();
this.wuqi = gun;
}

public void run() {
wuqi.openFire();
}

public wuqi getWuqi() {
return wuqi;
}

public void setWuqi(Gun wuqi) {
this.wuqi = wuqi;
}
}
1
2
3
4
5
6
7
8
public class celuetest {
public static void main(String[] args) {
choose choose = new choose(new Awm());
choose.run();
choose.setWuqi(new Akm());
choose.run();
}
}
1
2
3
//输出结果
Awm 火力覆盖中……
Akm 火力覆盖中……

总结

通过一个接口定义一套行为,各个不同的类实现该接口,运行时自由切换实现方式。如上述代码中,枪有很多种,但是其功能都是开火击杀,只不过不同的枪的射击细节不同,awm 是拉栓单发狙,akm 是连发步枪,当我们用枪时,自由选择,awm 就一枪一枪搞,akm 就一梭子拉到底。

0%