设计模式之策略模式
简介
策略设计模式
是一种行为型设计模式
,它使得在运行时可以根据需要选择不同的算法或策略来完成特定的任务。
如何使用策略模式
在使用策略设计模式
时,首先需要定义一个公共接口
或抽象类
,它描述了要实现的算法或策略的方法。然后,您可以编写多个具体的实现类,每个类实现接口或抽象类中定义的方法,并提供不同的算法或策略。
接下来,您需要编写一个客户端类,它将接受某些输入并使用所需的算法或策略来处理这些输入。该客户端类需要在运行时选择所需的算法或策略,并将其传递给处理输入的对象。
代码举例
实现类图
代码展示
MathOperation
/**.
* 设置一个我们需要执行的操作的抽象类
*/
public abstract class MathOperation {
/**.
* 描述执行操作的方法信息
* @param num1 第一个操作数
* @param num2 第二个操作数
* @return 计算结果
*/
public abstract int operate(int num1, int num2);
}
AddOperation
/**.
* 此处我们实现加法操作
*/
public class AddOperation extends MathOperation{
/**
* . 描述执行操作的方法信息
*
* @param num1 第一个操作数
* @param num2 第二个操作数
* @return 计算结果
*/
@Override
public int operate(int num1, int num2) {
return num1+num2;
}
}
SubtractOperation
/**.
* 此处我们实现剑法操作
*/
public class SubtractOperation extends MathOperation{
/**
* . 描述执行操作的方法信息
*
* @param num1 第一个操作数
* @param num2 第二个操作数
* @return 计算结果
*/
@Override
public int operate(int num1, int num2) {
return num1-num2;
}
}
测试代码
public class Main {
public static void main(String[] args) {
MathOperation mathOperation = new AddOperation();
System.out.println(mathOperation.operate(1, 2));
mathOperation = new SubtractOperation();
System.out.println(mathOperation.operate(1, 2));
}
}
经过测试我们发现我们的策略模式对于同样的事数据使用不同的算法或者策略进行了很好的替换操作。
模式详解
使用到的角色
在策略模式
中我们实现使用到或者说我们使用使用策略模式必须使用到以下角色:
Strategy
策略,策略角色负责决定实现策略所必须的接口。由我们的MathOperation
扮演;ConcreteStrategy
具体的策略负责实现策略角色的接口,即负责实现具体的策略(比如方法,方向,算法)。在我们的程序中由AddOperation
和AddOperation
扮演。context
上下文负责使用策略角色,上下文保存具体策略角色的实例,并使用具体角色来实现需求。在我们的程序中由Main
担任。
模式类图
使用策略模式的好处
当您面对一个问题,需要根据特定条件或环境选择不同的算法或策略来解决时,就可以考虑使用策略设计模式。例如,您可能需要在不同的场景下执行不同的排序算法,或者在不同的环境下执行不同的文件读取算法。使用策略设计模式可以使您的代码更加灵活、可扩展和易于维护。