php設計模式之策略模式

策略模式概念

策略模式針對一組算法,將每個算法封裝到具備共同接口的獨立的類中,此模式讓算法的變化獨立於使用算法的客戶。從而讓程序結構更靈活,具備更好的擴展性和維護性php

策略模式結構圖

clipboard.png

策略模式角色說明

  1. 抽象策略角色:定義全部支持的算法的公共接口。一般是以一個接口或抽象來實現算法

  2. 具體策略角色:實現接口的具體算法設計模式

  3. 環境角色:持有抽象策略角色的引用this

決策模式代碼實現

實際場景中,爲了不在代碼的重複,這裏引用鴨子游戲的列子,參考文獻: 《head first 設計模式》。
鴨子游戲中有個超類Durk,各自鴨子子類繼承超類,在超類中有個fly方法,然而鴨子子類中會存在橡皮鴨子類,而橡皮鴨子是不會fly的,能夠使用重載的方法,把橡皮鴨的fly()方法設置爲空,可是當不會飛的鴨子變多的時候,代碼重複就會愈來愈多,這個時候咱們就能夠用到策略模式來實現。spa

<?php

//定義一個抽象類
abstract class FlyBehavior{
    public function fly(){}
}

//抽象類的具體決策實現
class FlyWithWings extends FlyBehavior{
    public function fly(){
        echo "I can fly with wings";
    }
}

//抽象類的具體決策實現
class FlyWithNo extends FlyBehavior{
    public function fly(){
        echo "i can not fly";
    }
}

//引用抽象類
class Duck{
    private $_flyBehavior;

    public function __construct($object)
    {
        $this->_flyBehavior = $object;
    }

    public function fly(){
        return $this->_flyBehavior->fly();
    }
}

$duck = new Duck(new FlyWithWings());
echo $duck->fly();

總結

在實際場景中,若是應用須要變化之處,把他們獨立出來,單獨封裝,封裝好接口後,經過指定的接口實現類進行算法的變化設計

相關文章
相關標籤/搜索