首頁  >  文章  >  後端開發  >  PHP設計模式裝飾器模式詳解

PHP設計模式裝飾器模式詳解

韦小宝
韦小宝原創
2017-11-15 09:51:241985瀏覽

裝飾器模可以動態的添加修改類別的功能,.個類別提供了一個功能,如果要在修改並添加額外的功能,傳統的編程是寫一個子類別去繼承它,並重新實作類別的方法,使用裝飾器模式#,只需在執行時間加入一個裝飾器 #物件即可實現,可以實現最大的靈活性

PHP設計模式裝飾器模式詳解

<?php

/*
 * 装饰模式
 */

abstract class Beverage
{
    public $_name;

    abstract public function Cost();
}

// 被装饰者类
class Coffee extends Beverage
{
    public function construct()
    {
        $this->_name = &#39;Coffee&#39;;
    }

    public function Cost()
    {
        return 1.00;
    }
}

// 以下三个类是装饰者相关类
class CondimentDecorator extends Beverage //装饰类
{
    public function construct()
    {
        $this->_name = &#39;Condiment&#39;;
    }

    public function Cost()
    {
        return 0.1;
    }
}

class Milk extends CondimentDecorator //牛奶 配料 --装饰者
{
    public $_beverage;

    public function construct($beverage)
    {
        if ($beverage instanceof Beverage) {
            $this->_beverage = $beverage;
        } else
            exit(&#39;Failure&#39;);
    }

    public function Cost()
    {
        return $this->_beverage->Cost() + 0.2;
    }
}

class Sugar extends CondimentDecorator //糖 配料 --装饰者
{
    public $_beverage;

    public function construct($beverage)
    {
        $this->_name = &#39;Sugar&#39;;
        if ($beverage instanceof Beverage) {
            $this->_beverage = $beverage;
        } else {
            exit(&#39;Failure&#39;);
        }
    }

    public function Cost()
    {
        return $this->_beverage->Cost() + 0.2;
    }
}

// Test Case
//1.拿杯咖啡
$coffee = new Coffee();

//2.加点牛奶
$coffee = new Milk($coffee);

//3.加点糖
$coffee = new Sugar($coffee);

echo $coffee->Cost();
echo $coffee->_name;

裝飾模式降低了系統的耦合度,可以動態增加或刪除物件的職責,並使得需要裝飾的具體構件類別和具體裝飾類別可以獨立變化,以便增加新的具體構件類別和具體裝飾類別

相關推薦:

詳解PHP裝飾模式的範例程式碼

php裝飾模式

易懂的PHP設計模式之單例模式

以上是PHP設計模式裝飾器模式詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn