装饰者模式
装饰者模式
装饰者模式类似蛋糕,有草莓味、奶酪等种类,但是它们的核心都是蛋糕。
不断地将对象添加装饰的设计模式叫做 装饰者模式(Decorator)
注意:
装饰 边框与被装饰物的一致性
PHP代码实现
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 . "我要出门" . 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 "出门前整理头发" . PHP_EOL;
parent::display();
echo "出门后整理头发" . PHP_EOL;
}
}
$xiaofeng = new XiaoFang("小方");
$shoes = new Shoes($xiaofeng);
$fire = new Fire($shoes);
$fire->display();
总结
在装饰着模式中,装饰类(小方)和被装饰物(出门操作)具有一致性。在程序中,装饰物Finery类(以及它的子类)与表示被装饰物的XiaoFang类有相同的接口。可以随时增加新的打扮类,只该类继承Finery类(装饰类)并调用父类的同名方法。
该模式中用到了委托,它使类之间形成了弱关系。不改变框架代码的前提,就可以生成一个与其他对象具有不用关系的新对象。
缺点:导致程序中增加许多功能类似的很小的类。
网友评论