PHP设计模式之策略模式
今天和大家来讨论下策略模式,策略模式的定义是,将多个算法族封装起来,让它们之间可以互相替换。说的通俗一点就是说,一件事可以有多种解决办法,比如我们系统中经常会用到的支付,支付现在主要有支付宝、微信和网银,我们可以选择其中任意一种方法。
我们从如何追靓女来说说策略模式。小A最近遇到一个心动的女生,苦于不知道如何表达,故请教了前辈大Z。大Z告诉小A追女孩的方式太多了,不知道你适合哪一种。比如直奔主题,或者渐进式等等。
首先看下UML类图(没找到好的工具,手动画的)
<?php
namespace app\strategy;
interface ChaseGirlType
{
public function type ();
}
<?php
namespace app\strategy;
class ChaseGirlDirect implements ChaseGirlType
{
public function type ()
{
echo '我喜欢你,做我女朋友吧';
}
}
<?php
namespace app\strategy;
class ChaseGirlGradual implements ChaseGirlType
{
public function type()
{
echo '美女,可以认识下加个微信吗?';
}
}
<?php
namespace app\strategy;
class ChaseGirl
{
private $chaseGirlType = null;
public function __construct(ChaseGirlType $chaseGirlType)
{
$this->chaseGirlType = $chaseGirlType;
}
public function ChaseGirl ()
{
$this->chaseGirlType->type();
}
}
<?php
namespace app\strategy;
require '../../vendor/autoload.php';
// 小明追女孩采用直接式
echo '小明追女孩'.PHP_EOL;
$chaseGirl = new ChaseGirl(new ChaseGirlDirect());
$chaseGirl->ChaseGirl();
echo PHP_EOL. '============='.PHP_EOL;
// 小周追女孩
echo '小周追女孩'.PHP_EOL;
$chaseGirl = new ChaseGirl(new ChaseGirlGradual());
$chaseGirl->ChaseGirl();
过了一段时间后,小H来请教前辈大Z,问有没有更好的方法,感觉这两种都不太适合我。前辈说方法太多了,给你再传授一种,去捉弄她引起她的注意。那么我们只要新加入一个类,实现新的方法即可
<?php
namespace app\strategy;
class ChaseGirlTease implements ChaseGirlType
{
public function type()
{
echo '捉弄她,引起她的注意';
}
}