在软件开发中可能遇到过这种情况,一个类中需要写多个算法或复杂逻辑,它们放在类的方法中,通过if..else和switch..case 来区分是否调用哪个方法,这种我们称为硬编程,这样会导致整个类臃肿,修改添加都易出错。于是策略模式就是为了避免这种情况,将算法和复杂的逻辑独立封装起来。
UML图:
策略模式的简单实现:
public interface StrategyModelListener {
public String calculate();
}
public class StrategyModelA implements StrategyModelListener {
@Override
public String calculate() {
// TODO Auto-generated method stub
System.out.println("这个方法写复杂的算法过程A");
return "这个方法写复杂的算法过程A";
}
}
public class StrategyModelMain {
StrategyModelListener strategyModelListener;
public void setStrategyModelListener(StrategyModelListener strategyModelListener) {
this.strategyModelListener=strategyModelListener;
}
public String calculate(){
return strategyModelListener.calculate();
}
public static void main(String[] arg) {
StrategyModelMain strategyModelMain=new StrategyModelMain();
if (false) {
strategyModelMain.setStrategyModelListener(new StrategyModelA());
strategyModelMain.calculate();
} else {
strategyModelMain.setStrategyModelListener(new StrategyModelB());
strategyModelMain.calculate();
}
}
注:其中 StrategyModelB和StrategyModelA类似就不粘贴了。