文章目录
  1. 1. 策略模式 Strategy
    1. 1.1. 问题:
    2. 1.2. 意图:
    3. 1.3. 代码
  2. 2. 小结

虽然没开发过游戏,但我敢打赌这个模式是为游戏而生的。

策略模式 Strategy

策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。

问题:

One of the dominant strategies of object-oriented design is the “open-closed principle”.

意图:

  • Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from the clients that use it.
  • Capture the abstraction in an interface, bury implementation details in derived classes.

代码

例:比如打DOTA时,每个英雄都有4个技能,由玩家操作,玩家就相当于指令发出人,技能就相当于策略算法的实现

代码1:定义策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @author xdnote.com
* 一般为抽象类或者接口,因为必须被实例化,这里需要几个默认方法所以用了抽象类
* */
public abstract class Strategy {
public void skill1(){
System.out.println("被动技能1");
};
public void skill2(){
System.out.println("被动技能2");
};
public void skill3(){
System.out.println("被动技能3");
};
public void skill4(){
System.out.println("被动技能 大招");
};
}

代码2:策略的具体实现,小黑,龙骑

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 class Xiaohei extends Strategy{
@Override
public void skill1() {
System.out.println("施放 冰箭");
}
@Override
public void skill2() {
System.out.println("施放 沉默");
}
@Override
public void skill3() {
System.out.println("光环效果生效中");
}
}
public class Longqi extends Strategy{
@Override
public void skill1() {
System.out.println("施放 喷火器");
}
@Override
public void skill2() {
System.out.println("施放 控晕");
}
@Override
public void skill4() {
System.out.println("施放 变身");
}
}

代码3:客户端调用

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args){
Strategy palyer1 = new Xiaohei();
Strategy palyer2 = new Longqi();
palyer1.skill1();
palyer2.skill1();
palyer1.skill2();
palyer2.skill2();
palyer1.skill3();
palyer2.skill3();
palyer1.skill4();
palyer2.skill4();
}

小结

策略模式 Strategy

  • 使用频率:
    这个模式充分利用的面向的特点,平时如果定义多个实现体的话,也会可能会很自觉的写出一个标准的策略模式出来。

  • 利弊影响:
    比较容易懂。

文章目录
  1. 1. 策略模式 Strategy
    1. 1.1. 问题:
    2. 1.2. 意图:
    3. 1.3. 代码
  2. 2. 小结