Java设计模式:[1]策略模式

 时间:2024-11-04 12:45:43

1、定义:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。

2、策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数,关系图如下:

Java设计模式:[1]策略模式

3、图中ICalculator提供同意的方法,AbstractCalculator是辅助类,提供辅助方法,接下来,依次实现下每个类:首先统一接口:publicinterfaceICalculator{ publicintcalculate(Stringexp);}

4、辅助类:publicabstractclassAbstractCalculator{publicint[]split(Stringexp,Stringopt){ Stringarray[]=exp.split(opt); intarrayInt[]=newint[2]; arrayInt[0]=Integer.parseInt(array[0]); arrayInt[1]=Integer.parseInt(array[1]); returnarrayInt;}}

5、三个实现类:publicclassPlusextendsAbstractCalculatorimplementsICalculator{ @Overridepublicintcalculate(Stringexp){ intarrayInt[]=split(exp,"\\+"); returnarrayInt[0]+arrayInt[1]; }}publicclassMinusextendsAbstractCalculatorimplementsICalculator{@Overridepublicintcalculate(Stringexp){ intarrayInt[]=split(exp,"-"); returnarrayInt[0]-arrayInt[1];}} publicclassMultiplyextendsAbstractCalculatorimplementsICalculator{@Override publicintcalculate(Stringexp){ intarrayInt[]=split(exp,"\\*"); returnarrayInt[0]*arrayInt[1];}}

6、简单的测试类:publicclassStrategyTest{ publicstaticvoidmain(String[]args){ Stringexp="2+8"; ICalculatorcal=newPlus(); intresult=cal.calculate(exp); System.out.println(result);}}

7、输出:10策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可

  • java设计模式
  • java 设计模式简介
  • JAVA设计模式之观察者模式
  • Java设计模式之:Composite组合模式
  • JAVA接口设计模式-工厂模式
  • 热门搜索
    我和我的祖国手抄报简单又漂亮 立夏手抄报 世界无烟日手抄报图片 六一手抄报图片 新学期新起点手抄报 安全日手抄报 关于过年的手抄报 读书日手抄报 中秋手抄报图片大全图片 一年级清明节手抄报