<?php //訪問者設計模式構造了包含某個算法的截然不同的對象,在父對象以標準方式使用這些對象時就會將該算法應用於父對象。 class CD{ public $band; public $title; public $price; public function __construct($band, $title, $price){ $this->band = $band; $this->title = $title; $this->price = $price; } public function buy(){ echo 'a customer is buying'.PHP_EOL; } public function acceptVisitor($visitor){ $visitor->visitCD($this); } } class CDVisitiorLogPurchase{ public function visitCD($cd){ $logline = "{$cd->title} by {$cd->band} was purchased for {$cd->price} "; $logline .= 'at '.date('Y-m-d H:i:s').PHP_EOL; echo $logline; } } class CDVisitorPopulateDiscountList{ public function visitCD($cd){ if($cd->price < 10){ $this->_populateDiscountList($cd); } } protected function _populateDiscountList($cd){ echo 'populateDiscountList was visited'.PHP_EOL; } } $externalBand = 'TFBOYS'; $externalTitle = 'zuoshouyoushou'; $externalPrice = 7; $cd = new CD($externalBand, $externalTitle, $externalPrice); $cd->buy(); $cd->acceptVisitor(new CDVisitiorLogPurchase()); $cd->acceptVisitor(new CDVisitorPopulateDiscountList()); //當需要的對象包含以標準方式應用於某個對象的算法時,最佳的做法是使用訪問者設計模式。
訪問者設計模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.