策略模式的简单实现
- 使不同的算法可以被相互替换,而不影响客户端的使用。
通常如果一个问题有多个解决方案或者稍有区别的操作时,最简单的方式就是利用if-else or switch-case方式来解决,对于简单的解决方案这样做无疑是比较简单、方便、快捷的,但是如果解决方案中包括大量的处理逻辑需要封装,或者处理方式变动较大的时候则就显得混乱、复杂,而策略模式则很好的解决了这样的问题,它将各种方案分离开来,让操作者根据具体的需求来动态的选择不同的策略方案。 这里以简单的计算操作(+、-、、/)作为示例:
Calc:进行计算操作的上下文环境。
Strategy : 计算操作的抽象。
AddStrategy、SubStrategy、MultiStrategy、DivStrategy : 具体的 +、-、、/ 实现。
-
策略模式 以 = - * / 为例
interface ICaculate{
//计算的接口
String startCaculate(String a,String b);
}
public class Strategy {
private ICaculate strategy;
public void setStrategy(ICaculate strategy) {
this.strategy = strategy;
}public String calcualate(String a, String b){ return strategy.startCaculate(a,b); } } class Plus implements ICaculate{ @Override public String startCaculate(String a, String b) { return a+b; } } class test{ public static void main(String[]ary){ Strategy strategy=new Strategy(); strategy.setStrategy(new Plus()); strategy.calcualate("!","wew"); } }
模板方法:
抽象类定义统一的规则,使子类在不改变结构是可以修改自己的实现方法。
模板方法模式的主要思想:定义一个算法流程,将一些特定步骤的具体实现、延迟到子类。
使得可以在不改变算法流程的情况下,通过不同的子类、来实现“定制”流程中的特定的步骤
AbstractClass : 抽象类,定义了一套算法框架。
ConcreteClass1 : 具体实现类1;
ConcreteClass2: 具体实现类2;
不同对象的方法执行不一样,但是总体的调用方法流程一样。