مثال حلشده
متوسط موتور تخفیف
صورت مسئله
دانشجویی ۳۰٪، ویژه ۱۵٪، عادی صفر؛ فردا «کارمندی ۲۰٪» هم میآید. چه ساختاری؟
راهحل گامبهگام
۴ گام باقی مانده
def normal(amount): return amount
def student(amount): return amount * 0.7
def vip(amount): return amount * 0.85
def staff(amount): return amount * 0.8 # راهبرد تازه: فقط همین دو خط
STRATEGIES = {"normal": normal, "student": student, "vip": vip, "staff": staff}
def checkout(kind, amount):
try:
return STRATEGIES[kind](amount)
except KeyError:
raise ValueError(f"نوع تخفیف ناشناخته: {kind}")
print(checkout("student", 100)) # 70.0
برداشت نادرست رایج
اشتباه رایج
برای این کار باید سلسلهمراتب کلاس Strategy میساختیم.
تصحیح
وقتی راهبردها حالت ندارند، تابع کافی است. کلاس را برای وقتی نگه دار که راهبرد داده و چرخهٔ عمر خودش را داشته باشد.