PHP设计模式-策略模式

定义

策略模式 定义了算法族,并分别封装起来,让它们之间可以相互替换,让算法的变化独立于使用算法的客户

优点

  • 策略模式提供了管理相关的算法族的办法
  • 策略模式提供了可以替换继承关系的办法 将算封闭在独立的策略类中使得你可以独立于其客户改变它
  • 使用策略模式可以避免使用多重条件转移语句。

缺点

  • 客户必须了解所有的策略 这是策略模式一个潜在的缺点
  • 算法族和客户之间的通信开销
  • 策略模式会造成很多的策略类

鸭子类图

鸭子实例

飞行

//飞行接口
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鸭子";
    }
}

测试

$fly = new FlyWithWings();
$quack = new Quack();
$mallardDuck = new MallardDuck();
$mallardDuck->setFlyBehavior($fly);
$mallardDuck->setQuackBehavior($quack);
$mallardDuck->performFly();
$mallardDuck->performQuack();




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 场景问题# 1.1 报价管理## 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的...
    七寸知架构阅读 5,229评论 9 62
  • 1 场景问题 1.1 报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要...
    4e70992f13e7阅读 3,204评论 2 16
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 4,059评论 1 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,309评论 19 139
  • ios开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~(一)代理模式应用场景:当一个类...
    贝勒老爷阅读 1,377评论 1 8

友情链接更多精彩内容