>  기사  >  백엔드 개발  >  PHP 디자인 패턴 중 데코레이터 패턴에 대한 자세한 설명

PHP 디자인 패턴 중 데코레이터 패턴에 대한 자세한 설명

韦小宝
韦小宝원래의
2017-11-15 09:51:242003검색

Decorator 템플릿Model은 클래스의 기능을 동적으로 추가하고 수정할 수 있습니다. 클래스는 추가 기능을 수정하고 추가하려는 경우 기존 프로그래밍에서 이를 상속하는 하위 클래스를 작성하고 메서드를 다시 구현합니다. 클래스의 경우 데코레이터 모드를 사용하고 최대 유연성을 얻으려면 런타임에 데코레이터object만 추가하면 됩니다

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으로 문의하세요.