装饰器模式学习笔记
内容来自 - 《Laravel框架关键技术解析》
装饰器模式:是在开放-关闭原则下实现动态添加或减少功能的一种方式
Laravel在解析请求生成响应之前或之后需要经过中间件的处理,中间件就是使用装饰器模式实现的
简单的例子:
<?php
interface Decorator
{
public function display();
}
class CharleyChan implements Decorator
{
private $name;
public function __construct($name)
{
$this->name = $name;
}
public function display()
{
echo "我是{$this->name},我出门了!!!" . PHP_EOL;
}
}
class Finery extends CharleyChan
{
private $component;
public function __construct(Decorator $component)
{
$this->component = $component;
}
public function display()
{
$this->component->display();
}
}
class Shoes extends Finery
{
public function display()
{
echo "穿上鞋子" . PHP_EOL;
parent::display();
}
}
class Shorts extends Finery
{
public function display()
{
echo "穿上短裤" . PHP_EOL;
parent::display();
}
}
class Fire extends Finery
{
public function display()
{
echo "出门前先整理头发" . PHP_EOL;
parent::display();
echo "出门后再整理一下头发" . PHP_EOL;
}
}
$charley = new CharleyChan('CharleyChan');
$shoes = new Shoes($charley);
$shorts = new Shorts($shoes);
$fire = new Fire($shorts);
$fire->display();
运行上面代码,输出:
出门前先整理头发
穿上短裤
穿上鞋子
我是CharleyChan,我出门了!!!
出门后再整理一下头发