策略模式
定义一系列算法,封装每个算法,并使他们可以互换,不同的策略可以让算法独立于使用它们的客户而变化。
策略模式的优缺点
优点
-
干掉繁琐的 if、switch 判断逻辑
-
代码优雅、可复用、可读性好
-
符合开闭原则,扩展性好、便于维护
缺点
-
策略如果很多的话,会造成策略类膨胀
-
使用者必须清楚所有的策略类及其用途
策略模式的结构
策略模式的角色
- Strategy(抽象策略):抽象策略类,并且定义策略执行入口
- ConcreteStrategy(具体策略):实现抽象策略,实现algorithm方法
- Context(环境):运行特定的策略类。
实现流程
最简单例子,个人账户的转入转出
传统的 if/ else/ switch 等判断写法大家都会写,这里就不贴代码了,直接看策略模式怎么搞!
Strategy(抽象策略角色)
public interface Strategy {
public int calc(int num1,int num2);
}
ConcreteStrategyA(具体策略角色A)
public class AddStrategy implements Strategy{
@Override
public int calc(int num1, int num2) {
return num1 + num2;
}
}
ConcreteStrategyB(具体策略角色B)
public class SubstractStrategy implements Strategy{
@Override
public int calc(int num1, int num2) {
return num1 - num2;
}
}
Context(环境)
public class Environment {
private Strategy strategy;
public Environment(Strategy strategy){
this.strategy = strategy;
}
public int calculate(int a,int b){
return strategy.calc(a,b);
}
}
测试
public class MainTest {
public static void main(String[] args) {
Environment environment = new Environment(new AddStrategy());
int result = environment.calculate(20,5);
System.out.println(result);
Environment environment1 = new Environment(new SubstractStrategy());
int result1 = environment1.calculate(20, 5);
System.out.println(result1);
}
}
工厂模式和策略模式的区别?
- 工厂模式是属于创建型设计模式,主要用来针对不同类型创建不同的对象,达到解偶类对象。
- 策略模式是属于行为型设计模式,主要是针对不同的策略做出对应行为,达到行为解偶