複代理是什麼意思

複代理(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()時,實際上是在呼叫RealImplementationmethod1方法。但是,MyImplementation可以定義自己的方法,例如method3,這樣當我們呼叫my_implementation.method3()時,我們實際上是在呼叫MyImplementationmethod3方法。

這種模式可以用來實現靈活的設計,其中一個類別可以根據需要委託給不同的類別來執行特定的行為。