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

韦小宝
リリース: 2023-03-17 14:22:02
オリジナル
1979 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!