您的位置:首页 > 编程语言 > Java开发

Java设计模式(13)行为型:策略模式

2016-12-27 15:47 351 查看

(一)模块概述

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是完全一样的,正因为这个平等性,才能实现算法之间可以相互替换。所有的策略算法在实现上也是相互独立的,相互之间是没有依赖的。所以可以这样描述这一系列策略算法:策略算法是相同行为的不同实现。运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同时只能使用一个。

(二)模块结构

策略模式包括3种角色:

1)抽象策略角色: 策略类,通常由一个接口或者抽象类实现。

2)具体策略角色:包装了相关的算法和行为。

3)环境角色:持有一个策略类的引用,最终给客户端调用,这个角色也有可能是客户端本身。

(三)Demo

下面以加减乘除运算为不同策略的例子进行说明:

抽象策略角色:

public interface ICalculator {
public int calculate(int a, int b);
}
加法具体策略角色:

public class StrategyPlus implements ICalculator {
@Override
public int calculate(int a, int b) {
return a + b;
}
}
减法具体策略角色:
public class StrategyMinus implements ICalculator {
@Override
public int calculate(int a, int b) {
return a - b;
}
}
乘法具体策略角色:
public class StrategyMultiply implements ICalculator {
@Override
public int calculate(int a, int b) {
return a * b;
}
}
执行过程:

int a = 1;
int b = 1;
ICalculator ic = new StrategyPlus(); // 客户端选择需要的策略
int result = ic.calculate(a, b); // 统一的实现接口
System.out.println("运算的结果是:"+result);
执行结果:
运算的结果是:2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java设计模式 java