整体地替换算法的实现部分,能轻松地以不同的算法去解决同一个问题。
示例
让电脑玩“猜拳”游戏。
第一种策略是“如果这局猜拳获胜,那么下一局也出一样的手势”;另外一种策略是“根据上一局的手势从概率上计算出下一局的手势”。
类图
Hand类
| 1 | public class Hand { | 
Strategy接口
| 1 | public interface Strategy { | 
WinningStrategy类
| 1 | import java.util.Random; | 
ProbStrategy类
| 1 | import java.util.Random; | 
Player类
| 1 | public class Player { | 
Main类
| 1 | public class Main { | 
运行结果
| 1 | Even... | 
登场角色
Strategy(策略)
Strategy角色负责决定实现策略所必需的接口(API)。在示例程序中,由Strategy接口扮演此角色。
ConcreteStrategy(具体的策略)
ConcreteStrategy角色负责实现Strategy角色的接口(API),即负责实现具体的策略(战略、方向、方法和算法)。在示例程序中,由WinningStrategy类和ProbStrategy类扮演此角色。
Context(上下文)
负责使用Strategy角色。Context角色保存了ConcreteStrategy角色的实例,并使用ConcreteStrategy角色去实现需求(总之,还是要调用Strategy角色的接口(API))。在示例程序中,由Player类扮演此角色。

