訪問者設計模式

<?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());
//當需要的對象包含以標準方式應用於某個對象的算法時,最佳的做法是使用訪問者設計模式。


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