裝飾模式,動態地給乙個物件新增一些額外得職責,就增加功能來說,裝飾模式比生成子類更為靈活。
裝飾模式結構圖
開發過程中什麼時候會用到裝飾模式
在系統需要新功能的時候,是向舊的類中新增新的**。這些新的**通常裝飾了原有類的核心職責或主要行為。這樣子做的好處,有效地把類的核心職責和裝飾功能區分開了。
參照uml的結構圖,設計乙個帶有裝飾模式的事例**。
class
person
:"""component"""
defoperation
(self, name)
:pass
class
student
(person)
:"""concretecomponent"""
defoperation
(self, name)
:print
(name)
class
decorator
(person)
:"""decorator"""
component = person(
)# 利用set_person 來對物件進行包裝的
defset_component
(self, component)
: self.component = component
defoperation
(self, name)
:pass
class
decoratora
(decorator)
:"""concretedecorator"""
name =
"裝飾器a"
defeat_something
(self)
:print
("eat_something:"
+self.name)
defoperation
(self, name)
:# 舊有**的核心邏輯
self.component.operation(name)
# 新增加的**
self.eat_something(
)class
decoratorb
(decorator)
: name =
"裝飾器b"
"""concretedecorator"""
defoperation
(self, name)
:# 舊有的核心邏輯
self.component.operation(name)
# 新增加的邏輯
print
(self.name)
if __name__ ==
"__main__"
: student = student(
) decorator_a = decoratora(
) decorator_a.set_component(student)
decorator_a.operation(
"decorator_a:"
+"褲衩"
) decorator_b = decoratorb(
) decorator_b.set_component(decorator_a)
decorator_b.operation(
"decorator_b:"
+"帽子"
)
裝飾模式(python)
裝飾模式 動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。應用場景 適用於 新加入的功能僅僅是為了滿足一些只在某些特定情況下才會執行的需求 優點 1 把類中的裝飾功能從類中去除,簡化原有的類。2 裝飾模式把每個要裝飾的功能放在單獨的裝飾類中,並讓這個裝飾類包裝它所要裝...
Python設計模式 裝飾模式
有時為了給某個物件而不是給整個類新增乙個功能,使用繼承機制是新增功能的乙個有效途徑,但是不夠靈活,使用者不能控制對元件加邊框的方式和時機,並且會導致子類膨脹。一種較為靈活的方式就是將元件嵌入另乙個物件中,這個嵌入的物件叫做裝飾。裝飾模式 動態地給乙個物件增加一些額外的職責。就擴充套件功能而言,裝飾模...
python 裝飾者模式
裝飾者模式 裝飾器 本身就是第乙個函式 作用 裝飾其他函式,為其他函式提供附加功能 原則 不能修改被裝飾的函式的源 不能修改被裝飾的函式的呼叫方式 裝飾器對裝飾的函式是完全透明的,對呼叫方也是不可知的 實現裝飾器的知識儲備 1.函式即 變數 2.高階函式 3.巢狀函式 高階函式 巢狀函式 裝飾器 i...