php设计模式-装饰器模式
使用情景:假如一本书的上市,要经过创作,编辑加上摘要,SEO人员给书加上SEO关键词这么一个有序的过程,通过继承的方式的确可以做到有序地对文章装饰不同的东西,但是这样的纵深继承结构不太科学,所以从线上结构转换成一个父类多个子类的两层结构。
// 原始文章类
class Article
{
protected $_content;
protected $_parent;
public function __construct($content)
{
$this->_content = $content;
}
public function decorate()
{
return $this->_content;
}
}
// 编辑给文章装饰上摘要的类
class BianAticle extends Article
{
public function __construct($parent)
{
$this->_parent = $parent;
$this->decorate();
}
public function decorate()
{
return $this->_parent->decorate() . '<br>摘要:ABCD';
}
}
// SEO人员给文章加上SEO
class SEOArticle extends Article
{
public function __construct($parent)
{
$this->_parent = $parent;
}
public function decorate()
{
return $this->_parent->decorate() . '<br>SEO:EFGH';
}
}
$bian = new BianAticle(new SEOArticle(new Article('文章A')));
echo $bian->decorate();
echo '<br>';
echo '--------------------------------------------------';
echo '<br>';
$seo = new SEOArticle(new BianAticle(new Article('文章B')));
echo $seo->decorate();
结果:
文章A SEO:EFGH 摘要:ABCD -------------------------------------------------- 文章B 摘要:ABCD SEO:EFGH


浙公网安备 33010602011771号