رفتن به محتوای اصلی
برنامه‌سازی پیشرفته با پایتون درس‌نامهٔ آزاد
مثال متوسط ۱۲ دقیقه

تخفیف راهبردی بدون if تودرتو

سه نوع تخفیف داری و نوع چهارم در راه است؛ کدی بنویس که افزودن راهبرد، تغییر کدِ موجود نخواهد.

صورت مسئله

سه نوع تخفیف داری و نوع چهارم در راه است؛ کدی بنویس که افزودن راهبرد، تغییر کدِ موجود نخواهد.

مثال حل‌شده

موتور تخفیف

متوسط

صورت مسئله

دانشجویی ۳۰٪، ویژه ۱۵٪، عادی صفر؛ فردا «کارمندی ۲۰٪» هم می‌آید. چه ساختاری؟

راه‌حل گام‌به‌گام

    ۴ گام باقی مانده
    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 می‌ساختیم.

    تصحیح

    وقتی راهبردها حالت ندارند، تابع کافی است. کلاس را برای وقتی نگه دار که راهبرد داده و چرخهٔ عمر خودش را داشته باشد.

    مطالب مرتبط

    از همین بخش و با برچسب‌های مشترک

    این مطلب را خواندید؟ آن را علامت بزنید تا پیشرفت شما روی همین دستگاه ذخیره شود.

    وضعیت پیشرفت برای تخفیف راهبردی بدون if تودرتو