定义
策略模式是设计模式之中相对比较简单的一种模式,其解决的就是大量使用 if...else...、switch...case... 这样的结构导致的代码臃肿的问题。
来看看策略模式的定义:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户端而独立变化。
实现
首先定义一个基类,用于表示策略的接口:
public interface Operator {
void operate();
}
下面是两个具体的实现类,也就是具体的策略:
public class Operator1 implements Operator {
@Override
public void operate() {
System.out.println("operate 1...");
}
}
public class Operator2 implements Operator {
@Override
public void operate() {
System.out.println("operate 2...");
}
}
策略模式一般与工厂方法模式结合使用,来达到最佳效果:
public final class OperatorFactory {
public static Operator operator(int code) {
switch (code) {
case 0:
return new Operator1();
default:
return new Operator2();
}
}
}
如果在客户端中使用 switch...case... 结构把所有的实现策略都写在同一个方法中,势必引起代码冗余:
public class Client {
public static void main(String[] args) {
switch (Integer.valueOf(args[0])) {
case 0:
// operate...
break;
case 1:
// operate...
break;
case 2:
// operate...
break;
default:
// operate...
break;
}
}
}
如果结合策略模式和工厂方法模式,使用下面的代码,就会使得代码更加清晰,符合单一职责原则,同时,客户端不用关心具体的策略的执行细节,只需关心自己需要传入的值即可。
public class Client {
public static void main(String[] args) {
OperatorFactory.operator(Integer.valueOf(args[0])).operate();
}
}
总结
策略模式主要用来分离算法,根据相同的行为抽象来做不同的具体策略实现。通过以上也可以看出策略模式的优缺点:
优点:
- 结构清晰明了、使用简单直观。
- 耦合度相对而言较低,扩展方便。
- 操作封装也更为彻底,数据更为安全。
缺点:
- 随着策略的增加,子类也会变得繁多。
本文由
Fynn_ 原创,未经许可,不得转载!
网友评论