詳解裝飾模式

2021-10-23 20:36:08 字數 1646 閱讀 2044

顧名思義,裝飾模式就是給乙個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項,關係圖如下:

source類是被裝飾類,decorator類是乙個裝飾類,可以為source類動態的新增一些功能,**如下:

public

inte***ce

sourceable

public

class

source

implements

sourceable

}public

class

decorator

implements

sourceable

@override

public

void

method()

}//測試類:

public

class

decoratortest

}

輸出:

before decorator!

the original method!

after decorator!

裝飾器模式的應用場景:

需要擴充套件乙個類的功能。

動態的為乙個物件增加功能,而且還能動態撤銷。(繼承不能做到這一點,繼承的功能是靜態的,不能動態增刪。)

缺點:產生過多相似的物件,不易排錯!

其實每個模式名稱就表明了該模式的作用,**模式就是多乙個**類出來,替原物件進行一些操作,比如我們在租房子的時候回去找中介,為什麼呢?因為你對該地區房屋的資訊掌握的不夠全面,希望找乙個更熟悉的人去幫你做,此處的**就是這個意思。再如我們有的時候打官司,我們需要請律師,因為律師在法律方面有專長,可以替我們進行操作,表達我們的想法。

根據上文的闡述,**模式就比較容易的理解了,我們看下**:

public

inte***ce

sourceable

public

class

source

implements

sourceable

}public

class

proxy

implements

sourceable

@override

public

void

method()

private

void

atfer()

private

void

before()

}//測試類:

public

class

proxytest

}

輸出:

before proxy!

the original method!

after proxy!

**模式的應用場景:

如果已有的方法在使用的時候需要對原有的方法進行改進,此時有兩種辦法:

修改原有的方法來適應。這樣違反了「對擴充套件開放,對修改關閉」的原則。

就是採用乙個**類呼叫原有的方法,且對產生的結果進行控制。這種方法就是**模式。

使用**模式,可以將功能劃分的更加清晰,有助於後期維護!

python函式詳解 裝飾器011

1 什麼樣的函式稱為閉包函式?主要滿足兩點 函式內部定義了函式,引用了外部變數但非全域性變數 2 python裝飾器用於擴充套件原來函式功能的一種函式 3 裝飾器的作用 它可以讓被裝飾的函式在不需要做任何 變動的前提下增加額外的功能,裝飾器的返回值也是乙個函式物件 函式的指標 裝飾器的外部函式傳入我...

裝飾模式詳解

實現細節 component抽象構件角色 真實物件和裝飾物件有相同的介面。這樣,客戶端物件就能夠以與真實物件相同的方式同裝飾 物件互動。concretecomponent 具體構件角色 真實物件 io流中的fileinputstream fileoutputstream decorator裝飾角色 ...

簡單例子理解裝飾器

python中的裝飾器可謂極其神秘,雖然常聽到,使用裝飾器會讓 如虎添翼,網上更是用 外面加長褲來形象的解釋裝飾器,但我硬是看了很多次都不得要領。但我不能就這麼放棄啊,終於還是搞明白了點點,雖然不全面,但也算對裝飾器有了初步的了解吧。usr bin env python2 coding utf 8 ...