php 策略模式的學習 --引自《深入php物件導向模式與實踐》

來源:互聯網
上載者:User
#策略(Strategy)模式#定義抽象類別  Lessonabstract class Lesson{private $duration;private $coststrategy;#定義屬性public function __construct($duration , CostStrategy $strategy){    #執行個體化時,傳進來一個對象#用CostStrategy 類來處理 某個行為,而不用調用自身的方法來處理$this->duration =$duration;$this->coststrategy = $strategy;}public function cost(){return $this->coststrategy->cost($this);     #  ??? ??? ??? ??? ??? ??? ??? ??? ???}#不是用抽象類別的 abstract CostStrategy 類 中的方法 cost 來實現的,#從輸出的值看來  是用的 #TimedCostStrategy#FixedCostStrategy  中 的方法,所以# 在執行個體化對象時,用了  #TimedCostStrategy#FixedCostStrategy  中 的方法public function chargeType(){return $this->coststrategy->chargeType();}public function getDuration(){return $this->duration;}}abstract class CostStrategy{  #抽象類別是不能執行個體化的abstract function cost( Lesson $lesson);  #傳入的參數是對象abstract function chargeType();}class TimedCostStrategy extends CostStrategy{public function cost(Lesson $lesson){return ($lesson->getDuration()*5);   #  在Lesson 類中,getDuration 的傳回值是 return $this->duration;}public function chargeType(){return 'hourly rate!';}}class FixedCostStrategy extends CostStrategy{function cost(Lesson $lesson){return 30;#此處為調用如何方法,只是單純的返回一個值}function chargeType(){return 'fixed rate';}}#繼承類Lessonclass Lecture extends Lesson{}#繼承類Lesson  class Seminar extends Lesson{}#執行個體化對象$lessons[] = new Seminar(4,new TimedCostStrategy());    #產生了一個TimeConsTrategy的一個對象 $lessons[]= new Lecture(4 , new FixedCostStrategy());#產生了一個FixedConsTrategy的一個對象#分別 調用TimeConsTrategy && FixedConsTrategy 中的方法 const() 和 chargeType(),在執行遍曆foreach ($lessons as $lesson) {# 遍曆輸出print "lesson charge  {$lesson->cost()}==>>";print "Charge type:   {$lesson->chargeType()}
";}

以上就介紹了php 策略模式的學習 --引自《深入php物件導向模式與實踐》,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.