大家好,我是文杰,这篇博客,我为大家介绍下装饰器模式
在现有的一个对象中,为其添加功能,同时又不会改变它原有对象上的结构,就是对他原有的基础上进行修饰,这种就叫做修饰器模式,相当于不改原来的类的基础上,再重写这个类
一个类提供了一项功能,如果我们要在类中添加修改其他功能,我们通常采用继承的方法。创建一个子类继承这个类,重新实现类的方法。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以实现最大的灵活性。
特点:
父类是给你一个普通文章内容,两个子类是负责装饰,但是它消耗的资源还是有点大,日常工作中,如果实在迫不得已去扩展一个类,才推荐使用
<?php
// 装饰器做文章修饰功能
// 父类是给你一个普通文章内容
// 两个子类是负责装饰
class BaseArt
{
protected $art = null;
protected $content;
public function __construct($content)
{
$this->content = $content;
}
public function decorator()
{
return $this->content;
}
}
// 编辑文章摘要
class BianArt extends BaseArt
{
//这个construct是为了美化一篇文章,不是新增
public function __construct(BaseArt $art)
{
$this->art = $art;
$this->decorator();
}
public function decorator()
{
return $this->content = $this->art->decorator() . '小编摘要';
}
}
// SEO加关键词
class SEOArt extends BaseArt
{
//这个construct是为了美化一篇文章,不是新增
public function __construct(BaseArt $art)
{
$this->art = $art;
$this->decorator();
}
public function decorator()
{
return $this->content = $this->art->decorator() . 'SEO关键字';
}
}
$b = new SEOArt(new BianArt(new BaseArt('天天向上')));
echo $b->decorator();