1。意图
定义一系列的算法,一个一个地封装它们,并允许它们相互
替换。
策略模式可以使算法
独立于使用它的客户。
策略模式改变算法
二、战略模式结构图
三。战略模式中的主要角色
摘要战略(策略)的
作用:定义所有
支持的算法的通用接口,它通常与一个接口或抽象的实现。上下文中使用这个接口来调用它的策略定义的算法
具体的策略(策略)的作用:一个特定的算法与策略实现的接口
环境(上下文)的作用:保持战略级
参考和
配置了一个ConcreteStrategy对象
四、战略模型的优缺点
政策模式的优势:
1。策略模式为
管理相关的算法家族提供了一种
方法。
2,策略模式提供了一种替换继承关系的方法,该继承关系在独立策略类中是封闭的,以便您可以独立于其上下文更改它。
三.使用策略模式避免多
条件转移语句。
政策模式的缺陷:
1。客户必须了解所有策略,这是策略模式的一个潜在缺陷。
2、策略和上下文之间的通信开销
三.策略模式可以导致很多策略类。
五。战略模式应用场景
1。许多相关的类在行为上是不同的,策略提供了一种在多个行为中配置一个行为的方法。
2,您需要使用不同的算法变体。
三.该算法使用
用户不知道的数据,可以使用策略模式来避免复杂的、与算法相关的数据结构。
4,类定义了各种行为,这些行为在这个类的
操作中以多种形式出现。将相关的条件分支移到各自的策略类中,以替换这些条件语句。
六,战略模式和其他模式。
模板模式:模板方法模式和策略模式的
区别在于,策略模式使用委托方法提供不同的算法行为,而模板方法通过继承方法提供不同的算法行为。
共享模式(flyweight模式):如果有多个客户端需要调用相同的好政策课,他们可以让他们实现共享模式。
七。PHP策略模式的一个示例
< PHP
*抽象策略角色,用接口实现
* /
接口策略{
*算法接口
* /
公共
功能algorithminterface();
}
*具体的战略作用
* /
类concretestrategya实施战略{
公共功能algorithminterface(){
echo'algorithminterface ';
}
}
*具体的战略作用B
* /
类concretestrategyb实施战略{
公共功能algorithminterface(){
echo'algorithminterface B;
}
}
*具体的战略作用C
* /
类concretestrategyc实施战略{
公共功能algorithminterface(){
echo'algorithminterface C;
}
}
*环境的作用
* /
课堂语境{
*参考战略
私人_strategy美元;
公共功能__construct(战略策略){
美元-> _strategy = $策略;
}
公共功能contextinterface(){
这_strategy美元-> -> algorithminterface();
}
}
*客户端
* /
客户端类{
*主
程序。
* /
公共静态
函数main(){
一种新的concretestrategya美元=();
新的上下文(上下文=美元、美元);
背景- > contextinterface(美元);
strategyb美元=新concretestrategyb();
为上下文=新的上下文($ strategyb);
背景- > contextinterface(美元);
strategyc美元=新concretestrategyc();
为上下文=新的上下文($ strategyc);
背景- > contextinterface(美元);
}
}
客户::主();
>
以上是利用php实现的战略模式代码,以及一些战略模式分化的概念,希望能对大家的
学习有所帮助。