php設計模式之裝飾器

2021-07-27 14:20:19 字數 1485 閱讀 2494

裝飾器模式的理解:在原來類的基礎上改變功能(增加、減少或重寫);

實現:

原來:乙個簡單的抽象類,乙個實體類實現抽象類,用於簡單的功能。

裝飾之後: 裝飾抽象類繼承原來簡單的抽象類,並實現原來抽象類中的抽象方法,

裝飾器的實現類繼承裝飾器,實現類的建構函式中包含原來簡單抽象類的引用,

實現類實現裝飾器類增加的抽象方法和重新原來裝飾器類實現抽象類的方法,

把簡單的實體類傳遞給裝飾器的實現類的建構函式即可增加相應的功能。

簡單的**示例:

1.簡單的抽象類 testdecoratebase.php

<?php

namespace

phpadvanced;

abstract

class

testdecoratebase

}$obj = new testdecoratebaserealize();

$obj->getname();

結果: haha
3.裝飾器抽象類 testdecorater.php

<?php

namespace

phpadvanced;

include_once("./testdecoratebase.php");

abstract

class

testdecorater

extends

testdecoratebase

//實現抽象類的抽象方法

}4. 裝飾器實現類

<?php

namespace

phpadvanced;

include_once("./testdecorater.php");

include_once("./testdecoratebaserealize.php");

include_once("./testdecoratebase.php");

class

testdecoratee

extends

testdecorater

public

function

setname

() //實現裝飾器增加的方法

public

function

getname

() //改寫裝飾器實現的方法

}$objbase = new testdecoratebaserealize();

$objbasenew = new testdecoratee($objbase);

$objbasenew->setname();

$objbasenew->getname();

結果: hehe
裝飾器模式很強大,用於不改變現有功能的前提下擴充套件新的功能,具體使用方法要在實踐中體會。

php設計模式之裝飾器模式

裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比 繼承更有彈性的替代方案。有這樣乙個專案,做乙個餐廳訂餐系統。起初的 結構是這樣的。前面有很多beverage的繼承類,現在遇到的問題是牛奶的價錢 了,那麼所有相關的類,我們都要進行調整,比如milk,sugarandmilk類,這...

PHP設計模式之裝飾器模式

修飾模式,是物件導向程式設計領域中,一種動態地往乙個類中新增新的行為的設計模式。就功能而言,修飾模式相比生成子類更為靈活,這樣可以給某個物件而不是整個類新增一些功能。將所有的功能建立在繼承體系上會導致系統中的類越來越多,而且當你又要修改他們的分支的時候,可能還會出現重複 我們來看下面這個例子,為了計...

php設計模式之裝飾器模式

裝飾器模式 可以動態的新增,修改某乙個類的功能 特點 1 建立乙個可以被其他類可以實現的類 2 建立乙個功能類去實現剛才定義的類 發現 裝飾器模式與觀察者模式,介面卡模式,這幾種模式存在著一定的相似關係 定義乙個可以實現的類 inte ce decorator public function aft...