整体地替换算法的实现部分,能轻松地以不同的算法去解决同一个问题。
示例
让电脑玩“猜拳”游戏。
第一种策略是“如果这局猜拳获胜,那么下一局也出一样的手势”;另外一种策略是“根据上一局的手势从概率上计算出下一局的手势”。
类图
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类扮演此角色。