[英]Overloading and strategy pattern
我正在嘗試編寫一個電子郵件傳遞系統。 對於所有用戶,我有這個枚舉,在過去 3 個月和 6 個月內登錄的用戶:
class Receiver(enum.Enum):
ALL = "ALL"
THREE_MONTHS = "THREE_MONTHS"
SIX_MONTHS = "SIX_MONTHS"
問題是,我正在嘗試實現Strategy 模式,所以我需要強制執行類型檢查。 我知道默認情況下這是不可能的,但是......任何想法都會受到贊賞。
我需要它看起來像:
def send_to(Receiver.ALL):
pass
def send_to(Receiver.THREE_MONTHS):
pass
def send_to(Receiver.SIX_MONTHS):
pass
是的,我有Java背景。
並且一般發件人會相應地傳遞值:
@api_view(["POST"])
def send_email(request):
email_to = request.data["emailTo"]
send_to(email_to)
注意:我不想編寫多個 if 檢查或 switch case。 這完全違背了 Bob 大叔的 Open Closed 原則,因為如果有額外的情況,則必須修改方法。 絕對不能接受。
Python沒有函數重載。 它所擁有的是一流的函數對象。
創建一個將Receiver
值映射到適當函數的dict
。
def send_to_all():
pass
def send_to_last_three_months():
pass
def send_to_last_six_months():
pass
senders = {
Receiver.ALL: send_to_all,
Receiver.THREE_MONTHS: send_to_last_three_months,
Receiver.SIX_MONTHS: send_to_last_six_months,
}
@api_view(["POST"])
def send_email(request):
email_to = request.data["emailTo"]
sender = senders[email_to]
sender()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.