裝飾者模式:
是在開放-關閉原則下實現動態新增或減少功能,提高程式的擴充套件性.
詳細介紹
注:
-
本文可以作為學習”裝飾者模式”的基礎篇,但是我個人更建議配套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();
執行下看看結果,理解起來會更佳,執行流程不復雜就不贅述了:
出門前先整理頭髮
穿上裙子
穿上鞋子
我是小芳我出門了!!!
出門後再整理一下頭髮