模板设计模式

<?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;
//创建定义了设计常规步骤,但实际逻辑留给子类进行详细说明的对象时,最佳的做法是使用模板设计模式。


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