策略模式
策略模式定义
Define a familly algorithms, encapsulate each one, and make them interchangeable.(定义一组算法,将每个算法都封装起来,并且使他们之间互相转换)。
从以上官方定义分析到策略模式具有三个角色分别是:
- 封装角色
- 抽象策略角色(策略接口)
- 具体策略角色(实现策略接口的类)
策略模式实现计算器
我们分析一下计算器的简单运算,以加减法为例来划分一下其中的角色,比如 加法:1+1=2,减法1-1=0。这里加法和减法都是一个运算可以理解为两个策略;他们都有计算的功能需要定义一个接口提供统一的运算方法,这个为抽象策略角色;高层实现减价法则为封装角色及将接口放进去,通过接口调用,所以高层不用知道具体是加法还是减法。
因此封装角色起到了承上启下的作用,屏蔽了高层模块对策略、算法的直接访问,封装可能存在的变化。
下来简单实现计算器加减法的功能:
策略的接口,定义执行的方法:
package design.strategy.c001;
/**
* 定义策略接口(一组策略)
* @author yanwenfei
*
*/
public interface IStrategy {
//策略需要执行的方法
public int exec(int a, int b);
}
创建具体的策略角色及加法和减法