PHP設計模式之——策略模式

策略模式(Strategy Pattern)是對象的行爲模式,是對一組算法的抽象封裝,動態的選擇算法使用。在我們的日常生活中,策略模式體現在方方面面:早上起牀我去公司,可以坐公交,可以坐出租車,也可以步行,最終的目的都是到達公司,但是卻使用了不同的資源。

策略模式的三個角色:

  1. 抽象策略角色
  2. 具體策略角色
  3. 環境角色(對抽象策略角色的引用)
策略模式的實現步驟:

  1. 定義抽象角色(類)或抽象方法(接口)(定義好各個實現的共同抽象方法)
  2. 定義具體策略類(實現父類的共同方法)
  3. 定義環境角色類(私有化聲明抽象角色變量,重載構造方法,執行抽象方法)
策略模式的示例代碼:

<?php
/**
 * 策略模式  
 * */

interface wayToSchool {
    //定義抽象策略
    public function way();
}

class wayWithCar implements wayToSchool {
    //定義坐車去學校的具體策略
    public function way() {
        echo "goes to school by CAR!\n";
    }
}

class wayWithBicycle implements wayToSchool {
    //定義騎車去學校的具體策略
    public function way() {
        echo "goes to school by BICYCLE!\n";
    }
}

class wayWithWalk implements wayToSchool {
    //定義步行去學校的具體策略
    public function way() {
        echo "goes to school by WALK!\n";
    }
}

class Student {
    //定義環境角色類(學生)
    private $_wayToSchool;
    private $_name;

    public function __construct($name) {
        $this->_name = $name;
    }

    public function performance() {
        echo $this->_name, " ";
        $this->_wayToSchool->way();
    }

    public function setWayToSchool(wayToSchool $_way) {
        $this->_wayToSchool = $_way;
    }
}

$jerry = new Student("jerry");
$tom = new Student("tom");
$eggsy = new Student("eggsy");

//實現不同策略
$jerry->setWayToSchool(new wayWithCar);
$jerry->performance();

$tom->setWayToSchool(new wayWithBicycle);
$tom->performance();

$eggsy->setWayToSchool(new wayWithWalk);
$eggsy->performance();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章