常用设计模式之PHP实现: 策略模式

业务部分参考自 https://blog.csdn.net/flitrue/article/details/52614599

策略模式 Strategy Pattern

定义一组算法, 将每个算法都封装起来, 并且他们之间可以相互切换. 类似于"条条大路通罗马".

Define a family of algorithms, encapsulate each one, and make them interchangeable.

假如有一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有的广告位展示不同的广告。在传统的代码中,都是在系统中加入各种if else的判断,硬编码的方式。如果有一天增加了一种用户,就需要改写代码。使用策略模式,如果新增加一种用户类型,只需要增加一种策略就可以。其他所有的地方只需要使用不同的策略就可以。

首先声明策略的接口文件,约定了策略的包含的行为。然后,定义各个具体的策略实现类。

//接口
interface UserStrategy{
    function showAd();
    function showCategory();
}

//实现类
class FemaleUser implements UserStrategy{
    function showAd() {
        echo 'This is female showAd';
    }
    function showCategory() {
        echo 'This is female showCategory';
    }
}
class MaleUser implements UserStrategy{
    function showAd() {
        echo 'This is male showAd';
    }
    function showCategory() {
        echo 'This is male showCategory';
    }
}

//业务逻辑类
class Page{
    /** @var \UserStrategy */
    protected $strategy;
    public function __construct(\UserStrategy $strategy){
        $this->strategy = $strategy;
    }
    public function index(){
        echo 'AD:';
        $this->strategy->showAd();
        echo PHP_EOL;
        echo 'Category:';
        echo $this->strategy->showCategory();
    }

}

//命令行下直接随机测试
if(rand(1,2) == 1){
    $strategy = new MaleUser();
}
else{
    $strategy = new FemaleUser();
}
$page = new Page($strategy);
$page->index();

你可能感兴趣的:(算法,java,设计模式,python,linux)