定义:基本含义是针对一组算法或者行为特性,将他们抽象到具备共同接口函数的独立抽象类后者接口中,从而使得他们能够相互替换。这样就使得某一个特定的接口行为能够在不影响客户端的状况下发生变化。 算法
类型:行为类模式 编程
类图: 函数
策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,而且这些类实现相同的接口,相互之间能够替换。调用算法的主体则是封装到了封装类Context中,抽象策略Strategy通常是一个接口,目的只是为了定义规范,里面通常不包含逻辑。其实,这只是通用实现,而在实际编程中,由于各个具体策略实现类之间不免存在一些相同的逻辑,为了不重复的代码,咱们经常使用抽象类来担任Strategy的角色,在里面封装公共的代码。 spa
策略模式的结构: 设计
策略模式的核心是对算法的包装,最终目的是把使用算法的责任(环境)和算法实现进行解耦。因为环境和算法的独立,算法的增长,修改都不会影响到环境。 对象
客户端环境(Context)必须知道全部的策略类、理解这些不一样策略算法之间的区别,并自行决定使用哪个策略类来完成业务逻辑。 继承
适用场景 接口
作面向对象设计的,对策略模式必定很熟悉,由于它实质上就是面向对象中的继承和多态,至少在在如下两种状况下,你们能够考虑使用策略模式, struts2
struts2应用策略模式的例子: 扩展
Dispatcher进行初始化第二步,主要是完成对配置元素的加载器的初始化工做。请看图
这些配置加载器的具体实现核心,是一个针对不一样数据格式的配置元素的读取过程。因为配置的形式是多种多样的,这就致使了读取配置的算法也各不相同。
在这里,不管有多少中策略实现,只要他们的行为特征是同样的,能够从中获取策略实现的结果并加以处理。
策略实现能够任意进行了灵活的扩展,而对客户端调用者而言则是透明的。
这部分的代码请参考前面的文章。