裝飾者模式
裝飾者模式
裝飾者模式類似蛋糕,有草莓味生百、奶酪等種類递雀,但是它們的核心都是蛋糕柄延。
不斷地將對(duì)象添加裝飾的設(shè)計(jì)模式叫做 裝飾者模式(Decorator)
注意:
裝飾 邊框與被裝飾物的一致性
PHP代碼實(shí)現(xiàn)
1571209934450.jpg
<?php
interface Decorator
{
public function display();
}
/**
* 核心類
*/
class XiaoFang implements Decorator
{
private $name;
public function __construct($name)
{
$this->name = $name;
}
public function display()
{
echo "我是" . $this->name . "我要出門(mén)" . PHP_EOL;
}
}
/**
* 裝飾邊框類
*/
class Finery implements Decorator
{
private $componment;
public function __construct(Decorator $componment)
{
$this->componment = $componment;
}
public function display()
{
$this->componment->display();
}
}
/**
* 裝飾物類1
*/
class Shoes extends Finery
{
public function display()
{
echo "穿上鞋子" . PHP_EOL;
parent::display();
}
}
/**
* 裝飾物類2
*/
class Fire extends Finery
{
public function display()
{
echo "出門(mén)前整理頭發(fā)" . PHP_EOL;
parent::display();
echo "出門(mén)后整理頭發(fā)" . PHP_EOL;
}
}
$xiaofeng = new XiaoFang("小方");
$shoes = new Shoes($xiaofeng);
$fire = new Fire($shoes);
$fire->display();
總結(jié)
在裝飾著模式中蚀浆,裝飾類(小方)和被裝飾物(出門(mén)操作)具有一致性。在程序中搜吧,裝飾物Finery類(以及它的子類)與表示被裝飾物的XiaoFang類有相同的接口市俊。可以隨時(shí)增加新的打扮類滤奈,只該類繼承Finery類(裝飾類)并調(diào)用父類的同名方法摆昧。
該模式中用到了委托,它使類之間形成了弱關(guān)系蜒程。不改變框架代碼的前提绅你,就可以生成一個(gè)與其他對(duì)象具有不用關(guān)系的新對(duì)象。
缺點(diǎn):導(dǎo)致程序中增加許多功能類似的很小的類昭躺。