策略模式

来源:互联网 发布:动画软件tvp怎么用 编辑:程序博客网 时间:2024/06/08 16:53

策略模式startegy(对象行为型)

  主要应用于 实现某一个功能有多种算法。我们可以根据不同的环境来切换不同的算法。

  如果是硬编码,多个算法用if...else 等连接,那我如果新增一个算法,那么需要再修改程序中的源代码,以及修改客户端的调用代码。

  这样,代码会很复杂,而且维护困难。

  主要矛盾,解决如何使算法可以独立于使用它的客户,而进行变化。

  策略模式,将对象本身 和 运算规则分开,其功能非常强大,本身核心思想就是面向对象的多形象思想。

适用于:

  1.许多类都相似,只是行为有异。一个系统可以动态的在几种算法中选择一种。

  2.客户不会知道算法的具体实现。

  3.一个类定义多种行为。

环境类:维护对startegy类的引用。

抽象策略类:所有不同算法的共同接口。

具体策略类:实现具体的算法。


创建一个策略接口

public interface Strategy{      int calculate(int a , int b);}
具体实现接口的多个算法。比如:加减乘除

public class Add implement Strategy{     public int calculate(int a , int b){            return a+b;     }}
环境类

public class Environment{     private Strategy strategy;     public Environment(Strategy strategy){           this.strategy = strategy;     }     public void getStrategy(){           return this.strategy;     }     public Strategy setStrategy(Strategy strategy){         this.strategy = strategy;       }          public int calculate(int a , int b){           return this.strategy.calculate(a , b);     }}
客户端调用

main{    Add add = new Add();    Environment enviroment = new Environment(add);    enviroment.calculate(3,4);}

这个模式,就是将所有的算法封装好。但是客户端需要知道所有的算法,然后来使用。增加了客户端的使用难度。




0 0
原创粉丝点击