装饰器模式可以动态的添加修改类的功能,.个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程是写一个子类去继承它,并重新实现类的方法,使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性

<?php
/*
* 装饰模式
*/
abstract class Beverage
{
public $_name;
abstract public function Cost();
}
// 被装饰者类
class Coffee extends Beverage
{
public function construct()
{
$this->_name = 'Coffee';
}
public function Cost()
{
return 1.00;
}
}
// 以下三个类是装饰者相关类
class CondimentDecorator extends Beverage //装饰类
{
public function construct()
{
$this->_name = 'Condiment';
}
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('Failure');
}
public function Cost()
{
return $this->_beverage->Cost() + 0.2;
}
}
class Sugar extends CondimentDecorator //糖 配料 --装饰者
{
public $_beverage;
public function construct($beverage)
{
$this->_name = 'Sugar';
if ($beverage instanceof Beverage) {
$this->_beverage = $beverage;
} else {
exit('Failure');
}
}
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怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号