<?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()); //当需要的对象包含以标准方式应用于某个对象的算法时,最佳的做法是使用访问者设计模式。
访问者设计模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.