php Strategy 设计模式,php设计模式之策略(strategy)模式

该模式属于行为型模式

什么是策略模式?

定义:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,并让它们可以相互替换,这种模式就是策略模式。

简单理解就是 有n个做法供你选择,根据你的需要选择某个策略得到结果

策略模式特点:

⑴、多个类只区别在表现行为不同,可以使用Strategy(策略)模式,在运行时动态选择具体要执行的行为。

⑵、需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。

⑶、对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

⑷、客户端必须知道所有的策略类,并自行决定使用哪一个策略类,策略模式只适用于客户端知道所有的算法或行为的情况。

⑸、策略模式造成很多的策略类,每个具体策略类都会产生一个新的类。

优点:

1、策略模式提供了管理相关的算法族的办法

2、算法封闭在独立的Strategy(策略类)类中使得你可以独立于其Context改变它

3、使用策略模式可以避免使用多重条件转移语句

4、使用设计模式之后,我们的代码冗余和耦合度变低,每个策略模块完成对应的功能。

缺点:

一个功能我们就要响应制作一个策略类,但是我们统观MVC架构当中(ThinkPHP,Yii2等),一个控制器对应一个视图,其实也是策略设计模式的体现了。

话不多说上demo代码:<?php

interface Love

{

public function sajiao();

}

//策略类之一:Cute类

class Cute implements Love

{

public function sajiao()

{

echo '讨厌,不理你了 哼
';

}

}

//策略类之一:Tiger类

class Tiger implements Love

{

public function sajiao()

{

echo '给老娘过来!!
';

}

}

//注意:同样一个接口,2个不同的类来进行实现的时候 那么他的行为表现是不一样的

//创建一个女朋友类

class GirlFriend

{

protected $xingge; //女朋友类有自己的性格

public function __construct($xingge)

{

$this->xingge = $xingge;

}

//有一个撒娇的方法

public function sajiao()

{

$this->xingge->sajiao(); //通过不同的性格去执行不同的撒娇方法

}

}

//测试(要根据不同的形式来根据不同的策略来创建不同的对象)

$girl = new GirlFriend(new Cute());

$girl->sajiao(); //output:讨厌,不理你了 哼

$girl2 = new GirlFriend(new Tiger());

$girl2->sajiao(); //output:给老娘过来!!

声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值