装饰者模式:
是在开放-关闭原则下实现动态添加或减少功能,提高程序的扩展性.
详细介绍
注:
本文可以作为学习”装饰者模式”的基础篇,但是我个人更建议配套Decorator Pattern With Laravel 装饰者模式来学习效果更佳.
本文中的例子是由《laravel 框架关键技术解析》中摘抄的。有兴趣的朋友可以自行购买(这本书不能说写的多棒,但是作者写的很用心,laravel关键部分源码讲的很细,学习源码很有帮助)
<?php
interface Decorater{
public function display();
}
class XiaoFang implements Decorater{
private $name;
public function __construct($name){
$this->name = $name;
}
public function display(){
echo "我是".$this->name."我出门了!!!".'<br/>';
}
}
class Finery implements Decorater{
private $component;
public function __construct(Decorater $component){
$this->component = $component;
}
public function display(){
$this->component->display();
}
}
class Shoes extends Finery{
public function display(){
echo '穿上鞋子'.'<br/>';
parent::display();
}
}
class Skirt extends Finery{
public function display(){
echo '穿上裙子'.'<br/>';
parent::display();
}
}
class Fire extends Finery{
public function display(){
echo '出门前先整理头发'.'<br>';
parent::display();
echo '出门后再整理一下头发'.'<br>';
}
}
$xiaofang = new XiaoFang('小芳');
$shoes = new Shoes($xiaofang);
$skirt = new Skirt($shoes);
$fire = new Fire($skirt);
$fire->display();
运行下看看结果,理解起来会更佳,执行流程不复杂就不赘述了:
出门前先整理头发
穿上裙子
穿上鞋子
我是小芳我出门了!!!
出门后再整理一下头发