一,策略模式
策略模式(Strategy Pattern)是一种常用的软件设计模式,属于行为型模式。它的目的是定义一系列算法,并将每个算法封装起来让它们可以互换使用,算法的变化不会影响使用算法的用户。策略模式常用于创建一组可互换的算法,客户端可以根据需要选择不同的算法。
二,特点
-
封装性:每个算法都被封装在独立的策略类中,这些类通常实现了相同的接口。
-
可互换性:客户端可以通过切换不同的策略实现来改变算法,而不需要修改依赖算法的代码。
-
灵活性:策略模式使得算法的变化独立于使用算法的客户端。
-
易于扩展:可以很容易地添加新的策略,而不需要修改现有代码。
三,组成部分
- Strategy接口:定义了一个或多个方法,这些方法是策略的具体实现。
- ConcreteStrategy:实现了Strategy接口的具体策略类。
- Context:使用Strategy对象的类,它维持一个对Strategy对象的引用,并定义了一个方法用于访问Strategy对象的策略方法。
四,实现步骤
- 定义
Strategy
接口,包含算法的方法。 - 创建具体的策略类,实现
Strategy
接口,并实现具体的算法。 - 定义
Context
类,它有一个Strategy
类型的成员变量,用于持有策略对象,并有一个方法用于执行策略。 - 客户端代码根据需要选择并初始化相应的策略对象,并将其传递给
Context
。
五,代码
java
interface Strategy {
public int doOperation(int a,int b);
}
class OperationAdd implements Strategy{
@Override
public int doOperation(int a, int b) {
return a + b;
}
}
class OperationSubstract implements Strategy{
@Override
public int doOperation(int a, int b) {
return a - b;
}
}
class OperationMultiply implements Strategy{
@Override
public int doOperation(int a, int b) {
return a*b;
}
}
class Context{//Context类是核心
Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public int cal(int a,int b){
return strategy.doOperation(a,b);
}
}
public class StrategyDemo{
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
System.out.println(context.cal(2, 3));
context =new Context(new OperationMultiply());
System.out.println(context.cal(3, 4));
}
}