PHP策略模式设计

抽象策略(Strategy)角色:定义所有支持的算法的公共接口。通常是以一个接口或抽象来实现。Context使用这个接口来调用其ConcreteStrategy定义的算法。

具体策略(ConcreteStrategy)角色:以Strategy接口实现某具体算法。

环境(Context)角色:持有一个Strategy类的引用,用一个ConcreteStrategy对象来配置

<?php
interface Strategy { // 抽象策略角色,以接口实现
    public function algorithmInterface(); // 算法接口
}

class ConcreteStrategyA implements Strategy { // 具体策略角色A 
    public function algorithmInterface() {}
}

class ConcreteStrategyB implements Strategy { // 具体策略角色B 
    public function algorithmInterface() {}
}

class ConcreteStrategyC implements Strategy { // 具体策略角色C
    public function algorithmInterface() {}
}

class Context { // 环境角色
    private $_strategy;
    public function __construct(Strategy $strategy) {
        $this->_strategy = $strategy;
    } 
    public function contextInterface() {
        $this->_strategy->algorithmInterface();
    }
}

// client
$strategyA = new ConcreteStrategyA();
$context = new Context($strategyA);
$context->contextInterface();

$strategyB = new ConcreteStrategyB();
$context = new Context($strategyB);
$context->contextInterface();

$strategyC = new ConcreteStrategyC();
$context = new Context($strategyC);
$context->contextInterface();
最后修改时间为:2016 年 12 月 22 日 01 时 02 分 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论