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