重载和策略模式



我正在尝试编写一个电子邮件发送系统。对于所有用户,在过去3个月和6个月内登录的用户,我有这个enum:

class Receiver(enum.Enum):
ALL = "ALL"
THREE_MONTHS = "THREE_MONTHS"
SIX_MONTHS = "SIX_MONTHS"

问题是,我正试图实现一个策略模式,所以我需要强制类型检查。我知道默认情况下是不可能的,但是……如有任何意见,不胜感激。

我需要它看起来像:

def send_to(Receiver.ALL):
pass
def send_to(Receiver.THREE_MONTHS):
pass
def send_to(Receiver.SIX_MONTHS):
pass

是的,我有Java background.

一般发送方会相应地传递值:

@api_view(["POST"])
def send_email(request):
email_to = request.data["emailTo"]
send_to(email_to)

注意:我不需要写多张支票或换箱。这与Bob大叔的开闭原则完全矛盾,因为如果有额外的情况,那么方法必须被修改。绝对不可接受的。

Python没有函数重载。所拥有的是一等函数对象。

创建一个dict,将Receiver的值映射到相应的功能。

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()

最新更新