《laravel 框架關鍵技術解析》學習筆記之裝飾者模式

lcoding發表於2019-02-16

裝飾者模式
是在開放-關閉原則下實現動態新增或減少功能,提高程式的擴充套件性.
詳細介紹
注:

  1. 本文可以作為學習”裝飾者模式”的基礎篇,但是我個人更建議配套Decorator Pattern With Laravel 裝飾者模式來學習效果更佳.

  2. 本文中的例子是由《laravel 框架關鍵技術解析》中摘抄的。有興趣的朋友可以自行購買(這本書不能說寫的多棒,但是作者寫的很用心,laravel關鍵部分原始碼講的很細,學習原始碼很有幫助)

<?php
interface Decorater{

    public function display();
}


class XiaoFang implements Decorater{

    private $name;

    public function __construct($name){
        $this->name = $name;
    }

    public function display(){
        echo "我是".$this->name."我出門了!!!".`<br/>`;
    }
}


class Finery implements Decorater{

    private $component;

    public function __construct(Decorater $component){
            $this->component = $component;
    }

    public function display(){

        $this->component->display();
    }
}


class Shoes extends Finery{

    public function display(){
        echo `穿上鞋子`.`<br/>`;
        parent::display();
    }
}

class Skirt extends Finery{

    public function display(){
        echo `穿上裙子`.`<br/>`;
        parent::display();
    }
}
class Fire extends Finery{

    public function display(){
        echo `出門前先整理頭髮`.`<br>`;
        parent::display();
        echo `出門後再整理一下頭髮`.`<br>`;
    }
}

$xiaofang = new XiaoFang(`小芳`);
$shoes = new Shoes($xiaofang);
$skirt = new Skirt($shoes);

$fire = new Fire($skirt);

$fire->display();

執行下看看結果,理解起來會更佳,執行流程不復雜就不贅述了:

出門前先整理頭髮
穿上裙子
穿上鞋子
我是小芳我出門了!!!
出門後再整理一下頭髮

相關文章