PHP设计模式-策略模式
定义
策略模式
定义了算法族,并分别封装起来,让它们之间可以相互替换,让算法的变化独立于使用算法的客户
优点
- 策略模式提供了管理相关的算法族的办法
- 策略模式提供了可以替换继承关系的办法 将算封闭在独立的策略类中使得你可以独立于其客户改变它
- 使用策略模式可以避免使用多重条件转移语句。
- 客户必须了解所有的策略 这是策略模式一个潜在的缺点
- 算法族和客户之间的通信开销
- 策略模式会造成很多的策略类
文章图片
>; FlyBehavior; fly()%5D%5E-.-%5BFlyWithWings%7Cfly()%5D,%5B<
//飞行接口
interface FlyBehavior
{
public function fly();
}//会飞
class FlyWithWings implements FlyBehavior
{
public function fly()
{
echo "用翅膀飞";
}
}//不会飞
class FlyNoWay implements FlyBehavior
{
public function fly()
{
echo "我不会飞";
}
}
叫
//叫接口
interface QuackBehavior
{
public function quack();
}//呱呱叫
class Quack implements QuackBehavior
{
public function quack()
{
echo "呱呱叫";
}
}//吱吱叫
class Squeak implements QuackBehavior
{
public function quack()
{
echo "吱吱叫";
}
}
鸭子类
abstract class Duck
{
private flyBehavior;
private quackBehavior;
public abstract function display();
public function setFlyBehavior(FlyBehavior $flyBehavior)
{
$this->flyBehavior = $flyBehavior;
}public function setQuackBehavior(QuackBehavior $quackBehavior)
{
$this->quackBehavior = $quackBehavior;
}public function performFly()
{
$this->flyBehavior->fly();
}public functioin performQuack()
{
$this->quackBehavior->quack();
}
}class MallardDuck extends Duck
{
public function display()
{
echo "我是一只Mallard鸭子";
}
}
【PHP设计模式-策略模式】测试
$fly = new FlyWithWings();
$quack = new Quack();
$mallardDuck = new MallardDuck();
$mallardDuck->setFlyBehavior($fly);
$mallardDuck->setQuackBehavior($quack);
$mallardDuck->performFly();
$mallardDuck->performQuack();
推荐阅读
- thinkphp|thinkphp 3.2 如何调用第三方类库
- CGI,FastCGI,PHP-CGI与PHP-FPM
- 硬笔楷书26
- 设计模式-代理模式-Proxy
- PHP开发-Mac搭建ThinkPHP5.0
- 《教育心理学》读书笔记十四---学校班级管理的现状分析与策略研究
- 张晧奕(7.8国际黄金,原油丨日内进场操作策略建议,黄金参考策略)
- 王谦讳(1.26黄金多空利润如何把握;白银TD短线操作策略指导)
- 设计模式【15】--从审批流中学习责任链模式
- 依赖注入模块