ホームページ  >  記事  >  バックエンド開発  >  PHPデザインパターンのデコレータパターンの詳細説明

PHPデザインパターンのデコレータパターンの詳細説明

韦小宝
韦小宝オリジナル
2017-11-15 09:51:242003ブラウズ

Decorator templateModelは、クラスの機能を動的に追加および変更できます。 クラスが提供する機能を変更および追加したい場合、従来のプログラミングでは、それを継承するサブクラスを作成し、そのメソッドを再実装します。クラスのデコレータモードを使用し、実行時にデコレータオブジェクトを追加するだけで最大限の柔軟性を実現できます

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。