PHP的策略模式

來源:互聯網
上載者:User

策略模式:定義一系列的演算法,把每一個演算法封裝起來, 並且使它們可相互替換。本模式使得演算法可獨立於使用它的客戶而變化。策略模式把對象本身和運算規則區分開來,其功能非常強大,因為這個設計模式本身的核心思想就是物件導向編程的多型的思想。

也就是我們打算出行旅遊,我們可以有幾個策略可以考慮,可以騎單車,汽車,做火車,飛機。

【策略模式中主要角色】

環境類(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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.