欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

淺談PHP設(shè)計(jì)模式的裝飾器模式

簡介

裝飾器模式又叫做裝飾者模式,屬于結(jié)構(gòu)型的設(shè)計(jì)模式。
指的是在不改變?cè)愇募褪褂美^承的情況下動(dòng)態(tài)擴(kuò)展這個(gè)對(duì)象的功能,從而修飾源數(shù)據(jù)。
組成:
抽象構(gòu)件(Component)角色:定義一個(gè)抽象接口以規(guī)范準(zhǔn)備接收附加責(zé)任的對(duì)象。
具體構(gòu)件(ConcreteComponent)角色:實(shí)現(xiàn)抽象構(gòu)件,通過裝飾角色為其添加一些職責(zé)。
抽象裝飾(Decorator)角色:繼承抽象構(gòu)件,并包含具體構(gòu)件的實(shí)例,可以通過其子類擴(kuò)展具體構(gòu)件的功能。
具體裝飾(ConcreteDecorator)角色:實(shí)現(xiàn)抽象裝飾的相關(guān)方法,并給具體構(gòu)件對(duì)象添加附加的責(zé)任。

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比東山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式東山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋東山地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。

適用場(chǎng)景

適用于多繼承,且不改變?cè)瓟?shù)據(jù)的場(chǎng)景。當(dāng)然,是可以通過繼承的方式來達(dá)到同樣的效果,但是繼承耦合度很大。

優(yōu)點(diǎn)

  1. 裝飾器模式是繼承的一種替代方式,通過組合的方式完成繼承的功能,降低繼承的強(qiáng)關(guān)聯(lián)耦合。
  2. 降低類間的耦合。被裝飾類和裝飾類都可以獨(dú)立發(fā)展,不會(huì)相互影響。
  3. 符合開閉原則。
  4. 繼承是靜態(tài)地給類增加功能,而裝飾模式則是動(dòng)態(tài)地增加功能,更靈活。

缺點(diǎn)

裝飾器模式會(huì)增加許多子類,增加程序復(fù)雜性。

其它

為什么不用繼承?
是可以通過繼承的方式裝飾原有的類,但是一旦繼承關(guān)系確認(rèn)起來,想要再次擴(kuò)展,就需要更多的子類,由于繼承是強(qiáng)依賴關(guān)系,那么一定會(huì)產(chǎn)生很多的耦合。
為此產(chǎn)生了裝飾器模式,有更好的橫向擴(kuò)展方案。

代碼

//定義一個(gè)裝飾器模式的契約
interface RenderInterface {
    public function renderData();
}


//按照RenderInterface契約,實(shí)現(xiàn)一個(gè)傳遞數(shù)據(jù)的方法
class Init implements RenderInterface {
    private $data;
    public function __construct($data) {
        $this->data = $data;
    }

    public function renderData() {
        return $this->data;
    }
}


/**
裝飾者必須實(shí)現(xiàn)渲染接口類 RenderInterface 契約,這是該設(shè)計(jì)模式的關(guān)鍵點(diǎn)。否則,這將不是一個(gè)裝飾者而只是一個(gè)自欺欺人的包裝。
創(chuàng)建抽象類 RendererDecorator (渲染器裝飾者)實(shí)現(xiàn)渲染接口。
*/
abstract class RendererDecorator implements RenderInterface {
    protected $object;
    public function __construct(RenderInterface $object) {
        $this->object = $object;
    }
}


//按照RenderInterface契約,實(shí)現(xiàn)一個(gè)自增的類
class Increment extends RendererDecorator {
    public function renderData() {
        return $this->object->renderData() + 1;
    }
}


//按照RenderInterface契約,實(shí)現(xiàn)一個(gè)自減的類
class Decrement extends RendererDecorator {
    public function renderData() {
        return $this->object->renderData() - 1;
    }
}

//調(diào)用端=====================================================
$init = new Init(1);
echo (new Increment($init))->renderData();
echo (new Decrement($init))->renderData();
echo (new Init(1))->renderData();

當(dāng)前名稱:淺談PHP設(shè)計(jì)模式的裝飾器模式
網(wǎng)頁地址:http://chinadenli.net/article8/dsoihop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)站收錄、定制開發(fā)微信小程序、網(wǎng)站營銷建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化