複代理是什麼意思
複代理(Delegation)是物件導向程式設計中的一個概念,它允許一個物件將它的一部分行為委託給另一個物件。在這種模式下,委託者(Delegator)將某些方法委託給代表者(Delegate)來執行,這樣委託者就不需要直接實作這些方法,而是透過代表者來完成。
在Python中,委託可以通過多種方式實現,例如繼承、組件和介面等。一個簡單的例子是使用Python的__getattr__
魔法方法來實現委託。以下是一個簡單的例子:
class Delegator:
def __init__(self, delegate):
self.delegate = delegate
def __getattr__(self, attr):
if attr in self.__dict__:
return self.__dict__[attr]
return getattr(self.delegate, attr)
class RealImplementation:
def method1(self):
print("RealImplementation.method1")
def method2(self):
print("RealImplementation.method2")
class MyImplementation(Delegator):
def method3(self):
print("MyImplementation.method3")
my_implementation = MyImplementation(RealImplementation())
my_implementation.method1() # 輸出: RealImplementation.method1
my_implementation.method2() # 輸出: RealImplementation.method2
my_implementation.method3() # 輸出: MyImplementation.method3
在上面的例子中,Delegator
類別定義了一個__getattr__
方法,當直接訪問Delegator
物件時,如果找不到屬性,它會嘗試在self.delegate
中尋找並返回結果。MyImplementation
繼承自Delegator
,並將RealImplementation
作為其delegate
。當我們呼叫my_implementation.method1()
時,實際上是在呼叫RealImplementation
的method1
方法。但是,MyImplementation
可以定義自己的方法,例如method3
,這樣當我們呼叫my_implementation.method3()
時,我們實際上是在呼叫MyImplementation
的method3
方法。
這種模式可以用來實現靈活的設計,其中一個類別可以根據需要委託給不同的類別來執行特定的行為。