php 設計模式 之 裝飾模式

概念:

裝飾模式: 顧名思義,裝飾模式是一種對對象數據的屢次過濾,就像裝飾同樣, 一層層的修飾, 獲取滿意的結果。
裝飾模式共分爲兩個部分:
1: 裝飾者: 在這個接口接口下面的類和方法用以對數據進行修飾(即對數據進行過濾修改)
2: 被裝飾者: 這個就是要被過濾的數據接口對象

情景:

炒菜以前要對買來的菜進行揀菜, 洗菜等操做。這個就相似於裝飾操做, 裝飾者就是洗淨的過程操做, 被裝飾者就是菜。

實現:

//裝飾者
 abstract class Decorator
 {
     //裝飾操做
    abstract function process(Cai $cai);
 }

 class XiCai extends Decorator
 {
    public function process(Cai $cai)
    {
        echo '這是個洗菜操做。<br />';
    }
 }


//被裝飾者
 abstract class Cai
 {

    abstract function getGanJingZhi();
 }

//青菜
 class QingCai extends Cai
 {
    public function getGanJingZhi()
    {
        return 2;
    }
 }

//白菜
 class BaiCai extends Cai
 {
    public function getGanJingZhi()
    {
        return 3;
    }
 }

//讓已經裝飾的裝飾者再進行新的裝飾,表示多步過濾
abstract class DecorateActor extends Decorator
{
    protected $decorator;
    public function __construct(Decorator $d)
    {
        $this->decorator = $d;
    }

    function process(Cai $cai)
    {
        $this->decorator->process($cai);
    }
}

//揀菜操做
 class JianCai extends DecorateActor
 {
    public function process(Cai $cai)
    {
        echo '這是個揀菜操做。<br />';
        parent::process($cai);  //進行下一步過濾
    }
 }

//泡菜操做
 class PaoCai extends DecorateActor
 {
     public function process(Cai $cai)
    {
        echo '這是個浸泡操做。<br />';
        parent::process($cai); //進行下一步過濾
    }
 }

$cai = new QingCai();
$process = new JianCai(new PaoCai(new XiCai($cai)));
$process->process($cai);

結果:

這是個揀菜操做。
這是個浸泡操做。
這是個洗菜操做。

總結: 當咱們須要對數據進行過濾的時候, 裝飾模式能夠成爲你的選擇this

相關文章
相關標籤/搜索