国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP設計模式之裝飾器模式

Olivia / 2392人閱讀

摘要:裝飾器模式解決的問題修飾模式,是面向對象編程領域中,一種動態地往一個類中添加新的行為的設計模式。可以看到,這樣的模型很具有擴者性,我們可以輕松的添加其他裝飾器給區域對象,且不需要更改其他類,

裝飾器模式解決的問題

修飾模式,是面向對象編程領域中,一種動態地往一個類中添加新的行為的設計模式。就功能而言,修飾模式相比生成子類更為靈活,這樣可以給某個對象而不是整個類添加一些功能。

將所有的功能建立在繼承體系上會導致系統中的類越來越多,而且當你又要修改他們的分支的時候,可能還會出現重復代碼

我們來看下面這個例子,為了計算一塊區域的價值,我們把代碼寫成下面這個樣子:

// 區域抽象類
abstract class Area
{
    abstract public function treasure();
}
//森林類,價值100
class Forest extends Area 
{
    public function treasure()
    {
        return 100;
    }
}
//沙漠類,價值10
class Desert extends Area
{
    function function treasure()
    {
        return 10;
    }
}

上面的代碼看上去好像沒有什么問題,但是如果需要給一片被破壞的森林計算價值怎么辦呢,添加DamageForest子類么?顯然是不可行的,因為很有可能還有其他很多類型疊加的類,這會導致類中可能會有重復的代碼,且子類也會變的越來越多。

裝飾器模式的實現

裝飾器模式使用組合和委托,而不是使用繼承來解決上述的問題,我們在來看下面改良過的代碼:

// 區域抽象類
abstract class Area
{    
    abstract public function treasure();
}

//森林類,價值100
class Forest extends Area 
{
    public function treasure()
    {
        return 100;
    }
}
//沙漠類,價值10
class Desert extends Area
{
    function function treasure()
    {
        return 10;
    }
}
//區域類的裝飾器類
abstract class AreaDecorateor extends Area
{
    protected $_area = null;

    public function __construct(Area $area)
    {
        $this->_area = $area;
    }
}

//被破壞了后的區域,價值只有之前的一半
class Damaged extends AreaDecorateor
{
    public function treasure()
    {
        return $this->_area->treasure() * 0.5;
    }
}

//現在我們來獲取被破壞的森林類的價值
$damageForest = new Damaged(new Forest());
echo $damageForest->treasure();  //返回50
總結

上面的調用方法很像建立了一個管道,裝飾器模式經常被用于創建過濾器。

可以看到,這樣的模型很具有擴者性,我們可以輕松的添加其他裝飾器給區域對象,且不需要更改其他類,

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21361.html

相關文章

  • PHP設計模式裝飾模式

    摘要:概念裝飾器模式允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。 概念 裝飾器模式(Decorator Pattern)允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的...

    CloudwiseAPM 評論0 收藏0
  • PHPer月工作總結觀察者&裝飾模式

    摘要:我們可以把取消發貨單和取消訂單看成一個被觀察或被訂閱的類實例的對象,一旦發生取消行為,我們立即通知各個觀察者做出相對應的行為。裝飾器模式裝飾器思想,不管以前業務邏輯,甚至不去讀,調用之前的接口裝飾上新的數據,達到自己的目的。 前言 還是每月的目標至少寫一篇文章,一晃八月份就要過去了,這個月依然沒有什么產出,毫無疑問最近的狀態就是不停的工作,不停的加班。所以還是把最近工作進行一個總結,首...

    MadPecker 評論0 收藏0
  • php裝飾模式

    裝飾者模式概念 動態地將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案 裝飾者模式結構圖 showImg(https://segmentfault.com/img/bVKmnl?w=1040&h=795); 裝飾者角色 1.被裝飾者基類(Compoent):對象組件2.待裝飾對象(ConcreteComponent):具體組件角色,即將要被裝飾增加功能的類3.裝飾者基類(De...

    pf_miles 評論0 收藏0
  • php設計模式

    摘要:我們今天也來做一個萬能遙控器設計模式適配器模式將一個類的接口轉換成客戶希望的另外一個接口。今天要介紹的仍然是創建型設計模式的一種建造者模式。設計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設計模式 上節我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節我們介紹了...

    Dionysus_go 評論0 收藏0
  • php設計模式

    摘要:我們今天也來做一個萬能遙控器設計模式適配器模式將一個類的接口轉換成客戶希望的另外一個接口。今天要介紹的仍然是創建型設計模式的一種建造者模式。設計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設計模式 上節我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節我們介紹了...

    vspiders 評論0 收藏0

發表評論

0條評論

Olivia

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<