模板設計模式

<?php
//模板設計模式創建了一個實施一組方法和功能的抽象對象,子類通常將這個對象作爲模板用於自己的設計。
abstract class SaleItemTemplate{
    public $price = 0;

    public final function setPriceAdjustments(){
        $this->price += $this->taxAddition();
        $this->price += $this->oversizedAddition();
    }

    protected function oversizedAddition(){
        return 0;
    }

    abstract protected function taxAddition();
}

class CD extends SaleItemTemplate{
    public $band;
    public $title;

    public function __construct($band, $title, $price){
        $this->band = $band;
        $this->title = $title;
        $this->price = $price;
    }

    protected function taxAddition(){
        return round($this->price * 0.05, 2);
    }
}

class BandEndorsedCaseOfCereal extends SaleItemTemplate{
    public $band;

    public function __construct($band, $price){
        $this->band = $band;
        $this->price = $price;
    }

    protected function taxAddition(){
        return 0;
    }

    protected function oversizedAddition(){
        return round($this->price * 0.2, 2);
    }
}

$externalTitle = 'fenghuangchuanqi';
$externalBand = 'zuixuanminzufeng';
$externalCDPrice = 100;
$externalCerealPrice = 200;

$cd = new CD($externalBand, $externalTitle, $externalCDPrice);
$cd->setPriceAdjustments();
echo 'The total cost for CD item is:'.$cd->price.PHP_EOL;

$cereal = new BandEndorsedCaseOfCereal($externalBand, $externalCerealPrice);
$cereal->setPriceAdjustments();
echo 'The total cost for Cereal item is:'.$cereal->price.PHP_EOL;
//創建定義了設計常規步驟,但實際邏輯留給子類進行詳細說明的對象時,最佳的做法是使用模板設計模式。


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