目录
策略模式
一个类的行为或其算法可以在运行时更改,策略模式把对象本身和运算规则区分开来,在多种算法相似的情况下,能够解决if...else所带来的复杂和难以维护的问题。
实现策略模式主要包括三部分
- 环境类Context:用来操作策略的上下文,即Conext持有策略。
- 抽象策略类(Strategy):策略的抽象接口,定义需要实现的方法。
- 具体的策略类(ConcreteStrategy):具体策略的实现。
具体步骤为
创建接口
public interface Strategy {
void operation(int a ,int b);
}
创建实现类
public class OpeationAdd implements Strategy {
@Override
public void operation(int a, int b) {
System.out.println("加法..."+(a+b));
}
}
public class OperationMul implements Strategy {
@Override
public void operation(int a, int b) {
System.out.println("乘法..."+(a*b));
}
}
public class OperationSub implements Strategy {
@Override
public void operation(int a, int b) {
System.out.println("减法..."+(a-b));
}
}
创建环境类
public class Context {
// 持有策略
private Strategy strategy;
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void execute(int a, int b){
strategy.operation(a, b);
}
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
context.execute(12, 34);
context = new Context(new OperationSub());
context.execute(12, 34);
context = new Context(new OperationMul());
context.execute(12, 34);
}
}
输出

总结
策略模式的优点:
- 在运算的时候通常会选择if-else语句,这种情况下代码的耦合性太高,增加一种类型时就需要修改一次代码,造成代码的过度臃肿,有了策略模式我们可以避免这种现象。
- 策略模式遵循开闭原则,实现了代码的解耦,当增加新的处理方式时只需要继承接口即可。
缺点:
- 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。
- 策略模式造成很多的策略类,每个具体策略类都会产生一个新类。
1106

被折叠的 条评论
为什么被折叠?



