設(shè)計模式(一):策略模式(strategy)

應(yīng)用場景

一般是用來根據(jù)不同的場景,來實現(xiàn)不同的策略。比如,公司在雙十一做活動,某些商品打折,活動結(jié)束后,回復(fù)原本的價格。這時候,策略模式就很方便了。

UML圖
策略模式UML.jpg

策略(Strategy)

定義所有支持的算法的公共接口。 Context 使用這個接口來調(diào)用某 ConcreteStrategy 定義的算法。

策略實現(xiàn)(ConcreteStrategy)

以 Strategy 接口實現(xiàn)某具體算法

上下文(Context)

用一個 ConcreteStrategy 對象來裝配, 維護一個 Strategy 對象的引用,可定義一個接口讓 Strategy 訪問它的數(shù)據(jù)

代碼實現(xiàn)(PHP)
  1. strategy.php (策略類)
<?php

// 抽象策略類
abstract class Strategy
{
    //抽象算法,讓不同的策略實現(xiàn)
    public abstract function AlgorithmInterface();
}

//具體的策略類
class ConcreteStrategyA extends Strategy
{
    public function AlgorithmInterface()
    {
        // TODO: Implement AlgorithmInterface() method.
        echo "A策略實現(xiàn)", PHP_EOL;
    }
}

class ConcreteStrategyB extends Strategy
{
    public function AlgorithmInterface()
    {
        // TODO: Implement AlgorithmInterface() method.
        echo "B策略實現(xiàn)", PHP_EOL;
    }
}

class ConcreteStrategyC extends Strategy
{
    public function AlgorithmInterface()
    {
        // TODO: Implement AlgorithmInterface() method.
        echo "C策略實現(xiàn)", PHP_EOL;
    }
}
  1. context.php (上下文類)
<?php
require './strategy.php';
// 上下文
class Context
{
    private $strategy;

    public function __construct(Strategy $strategy)
    {
        // 傳一個策略進(jìn)來
        $this->strategy = $strategy;
    }

    public function contextInterface()
    {
        $this->strategy->AlgorithmInterface();
    }
}
  1. 調(diào)用示例 (main.php)
<?php
require_once './context.php';
require_once './strategy.php';

//調(diào)用示例
$context = new Context(new ConcreteStrategyA());
$context->contextInterface();

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

$context = new Context(new ConcreteStrategyC());
$context->contextInterface();
  1. 輸出


    輸出
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容