大家好,我是文傑,這篇博客,我爲大家介紹下裝飾器模式
在現有的一個對象中,爲其添加功能,同時又不會改變它原有對象上的結構,就是對他原有的基礎上進行修飾,這種就叫做修飾器模式,相當於不改原來的類的基礎上,再重寫這個類
一個類提供了一項功能,如果我們要在類中添加修改其他功能,我們通常採用繼承的方法。創建一個子類繼承這個類,重新實現類的方法。在面向對象的設計中,而我們也應該儘量使用對象組合,而不是對象繼承來擴展和複用功能。裝飾器模式就是基於對象組合的方式,可以實現最大的靈活性。
特點:
父類是給你一個普通文章內容,兩個子類是負責裝飾,但是它消耗的資源還是有點大,日常工作中,如果實在迫不得已去擴展一個類,才推薦使用
<?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();