PHP 策略模式

 

策略模式:定義一系列的算法,把每個算法封裝起來, 而且使它們可相互替換。本模式使得算法可獨立於使用它的客戶而變化。策略模式把對象自己和運算規則區分開來,其功能很是強大,由於這個設計模式自己的核心思想就是面向對象編程的多形性的思想。php

也就是咱們打算出行旅遊,咱們能夠有幾個策略能夠考慮,能夠騎自行車,汽車,作火車,飛機。算法

 

 

【策略模式中主要角色】編程

環境類(Context):用一個ConcreteStrategy對象來配置。維護一個對Strategy對象的引用。可定義一個接口來讓Strategy訪問它的數據。(出去旅遊(接口類或抽象類)必須考慮交通工具,交通工具要考慮時間(接口類或抽象類要實現的方法),費用等問題)
抽象策略類(Strategy):定義全部支持的算法的公共接口。 Context使用這個接口來調用某ConcreteStrategy定義的算法。(環境類的實現,選擇交通工具範圍,火車,飛機,自行車。。。)
具體策略類(ConcreteStrategy):以Strategy接口實現某具體算法。(給出咱們選擇交通方式的信息)設計模式

 

 

【策略模式PHP示例】工具

# 環境類(Context)
interface TravelTool{
    public function useTime();
    public function money();
}

# 抽象策略類(Strategy)

class Plane implements TravelTool {  # 飛機
    public function useTime()
    {
        return  '1 h';
    }

    public function  money()
    {
        return '$10';
    }
}

class Train implements TravelTool {  # 火車
    public function useTime()
    {
        return  '3 h';
    }

    public function  money()
    {
        return '$5';
    }
}

# 具體策略類(ConcreteStrategy)

class doTravel{
    public $obj;

    public function __construct($method)
    {
        $temp = new ReflectionClass($method);     # 看到別的博客用了反射就學習了一下 http://www.php.net/manual/zh/book.reflection.php
        $this->obj = $temp->newInstance();
    }

    public function money(){
        echo $this->obj->money();
    }

    public function useTime(){
        echo $this->obj->useTime();
    }
}

$obj = new doTravel('Train');
$obj->money();
echo "<br/>";
$obj->useTime();

  關於更詳細的內容(優勢,缺點,適用性)看這裏  轉載於http://www.howzhi.com/group/php/discuss/3456學習

相關文章
相關標籤/搜索