Python實現(xiàn)適配器模式、裝飾器模式、代理模式
今天介紹三種結(jié)構(gòu)型設(shè)計模式:適配器模式、裝飾器模式、代理模式。
適配器模式
適配器模式,用于將一個類的接口轉(zhuǎn)換為另一個接口,以滿足客戶端的需求。在Python中,適配器模式可以通過繼承或組合來實現(xiàn)。
以下是一個使用繼承實現(xiàn)適配器模式的示例:
class Target:
def request(self):
pass
class Adaptee:
def specific_request(self):
pass
class Adapter(Target, Adaptee):
def request(self):
self.specific_request()
在上面的示例中,Target是目標(biāo)接口,Adaptee是需要適配的類,Adapter是適配器類,它繼承了Target和Adaptee,并實現(xiàn)了request方法,將specific_request方法轉(zhuǎn)換為request方法。
裝飾器模式
裝飾器模式,用于動態(tài)地給一個對象添加額外的功能,而不需要修改原始類的代碼。在Python中,裝飾器模式可以通過函數(shù)和類來實現(xiàn)。
以下是一個使用函數(shù)實現(xiàn)裝飾器模式的示例:
def decorator(func):
def wrapper(*args, **kwargs):
# 在函數(shù)調(diào)用前添加額外的功能
result = func(*args, **kwargs)
# 在函數(shù)調(diào)用后添加額外的功能
return result
return wrapper
@decorator
def target():
pass
在上面的示例中,decorator是裝飾器函數(shù),它接受一個函數(shù)作為參數(shù),并返回一個新的函數(shù)wrapper,wrapper函數(shù)在調(diào)用原始函數(shù)之前和之后添加了額外的功能。@decorator語法是Python中的語法糖,它等同于target = decorator(target)。
代理模式
代理模式,用于控制對另一個對象的訪問。在Python中,代理模式可以通過繼承或組合來實現(xiàn)。
以下是一個使用組合實現(xiàn)代理模式的示例:
class Subject:
def request(self):
pass
class RealSubject(Subject):
def request(self):
pass
class Proxy(Subject):
def __init__(self):
self.real_subject = RealSubject()
def request(self):
# 在調(diào)用真實主題之前或之后添加額外的功能
self.real_subject.request()
在上面的示例中,Subject是主題接口,RealSubject是真實主題類,Proxy是代理類,它包含一個真實主題對象,并實現(xiàn)了request方法,可以在調(diào)用真實主題之前或之后添加額外的功能。