刨根问底-struts2应用策略模式(Strategy)分析

定义:基本含义是针对一组算法或者行为特性,将他们抽象到具备共同接口函数的独立抽象类后者接口中,从而使得他们能够相互替换。这样就使得某一个特定的接口行为能够在不影响客户端的状况下发生变化。 算法

类型:行为类模式 编程

类图: 函数


  策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,而且这些类实现相同的接口,相互之间能够替换调用算法的主体则是封装到了封装类Context中,抽象策略Strategy通常是一个接口,目的只是为了定义规范,里面通常不包含逻辑。其实,这只是通用实现,而在实际编程中,由于各个具体策略实现类之间不免存在一些相同的逻辑,为了不重复的代码,咱们经常使用抽象类来担任Strategy的角色,在里面封装公共的代码。 spa

策略模式的结构: 设计

  • 环境角色context:也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。将制有一个Strategy类的引用,将决定调用哪一种Strategy角色完成业务逻辑。
  • 抽象策略Strategy:一般状况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码。这个角色是策略模式的核心,他是全部策略算法的核心概括。
  • 具体策略(ConcreteStrategy):具体策略角色一般由一组封装了算法的类来担任,这些类之间能够根据须要自由替换。

    策略模式的核心是对算法的包装,最终目的是把使用算法的责任(环境)和算法实现进行解耦。因为环境和算法的独立,算法的增长,修改都不会影响到环境。 对象

    客户端环境(Context)必须知道全部的策略类、理解这些不一样策略算法之间的区别,并自行决定使用哪个策略类来完成业务逻辑。 继承

适用场景 接口

        作面向对象设计的,对策略模式必定很熟悉,由于它实质上就是面向对象中的继承和多态,至少在在如下两种状况下,你们能够考虑使用策略模式, struts2

  • 几个类的主要逻辑相同,只在部分逻辑的算法和行为上稍有区别的状况。
  • 有几种类似的行为,或者说算法,客户端须要动态地决定使用哪种,那么可使用策略模式,将这些算法封装起来供客户端调用。

struts2应用策略模式的例子: 扩展

Dispatcher进行初始化第二步,主要是完成对配置元素的加载器的初始化工做。请看图

这些配置加载器的具体实现核心,是一个针对不一样数据格式的配置元素的读取过程。因为配置的形式是多种多样的,这就致使了读取配置的算法也各不相同。

在这里,不管有多少中策略实现,只要他们的行为特征是同样的,能够从中获取策略实现的结果并加以处理。

策略实现能够任意进行了灵活的扩展,而对客户端调用者而言则是透明的。

这部分的代码请参考前面的文章。

相关文章
相关标签/搜索