Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Dekoratormusters von PHP-Entwurfsmustern

Detaillierte Erläuterung des Dekoratormusters von PHP-Entwurfsmustern

韦小宝
韦小宝Original
2017-11-15 09:51:241981Durchsuche

Decorator-ModulModul kann die Funktion einer Klasse dynamisch hinzufügen und ändern. Wenn Sie zusätzliche Funktionen ändern und hinzufügen möchten, ist dies der Fall Schreiben Sie eine Unterklasse, um sie zu erben und die Klassenmethode mithilfe des Dekoratormusters erneut zu implementieren. Sie müssen zur Laufzeit lediglich ein DekoratormusterObjekt kann implementiert werden, um maximale Flexibilität zu erreichen

Detaillierte Erläuterung des Dekoratormusters von PHP-Entwurfsmustern

<?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;
Der Dekorationsmodus reduziert die Kopplung des Systems und kann die Verantwortlichkeiten von Objekten dynamisch hinzufügen oder löschen und ermöglicht die spezifische Komponente Klassen und spezifische Dekorationsklassen, die dekoriert werden müssen, können unabhängig voneinander geändert werden, sodass neue spezifische Komponentenklassen und spezifische Dekorationsklassen hinzugefügt werden können

Verwandte Empfehlungen:

Detaillierter Beispielcode des PHP-Dekorationsmodus

PHP-Dekorationsmodus

Einfach zu verwenden PHP-Designmuster-Singleton-Muster verstehen

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Dekoratormusters von PHP-Entwurfsmustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn