Design Pattern, Git, Swift, متوسط

Decorator pattern پیاده سازی دیزاین پترن ها در سویفت

در این مبحث می خواهیم پیاده سازی decorator pattern را با مثالی از یک منوی کافی شاپ بزنیم .

در الگوی decorator هر شی خود علاوه بر ماهیت خویش , نمونه ای از شی قبل خود نیز می باشد . اجازه بدهید این موضوع را با مثال شفاش سازی کنم

decorator pattern in swift

فرض کنید می خواهیم لیست منویی از کافی شاپ با قیمت های آن تولید کنیم که مشتری در این لیست می تواند اسپرسو , چایی و … سفارش دهد . همچنین مشتری می خواهد سفارش وی همراه با کارامل , شیر , شیر سویا و … باشد با توجه به اینکه هر کدام از منو ها قیمت خاص خود را دارد با رزرو هر کدام مشتری قیمت خاصی را می بایست پرداخت کند.

پیاده سازی مثال :

خب با توجه به نوع مثال ما ابتدا نیاز به یک کلاس به نام نوشیدنی ها داریم که ابتدا به سراغ تولید آن می رویم.

پیاده سازی کلاس انتزاعی نوشیدنی ها :

کلاس بالا قرار است کلاسی انتزاعی برای ما باشد که نوشیدنی ها را پوشش می دهد.

متد cost() که در این مثال آورده شده است قرار است قیمت ها را به ما باز گرداند ( همچنین این کلاس را ما می توانیم به عنوان یکی protocol تعریف کنیم ولی اصول طراحی این الگو بر این است که به صورت کلاسی انتزاعی تعریف شود که بتوان در رویداد مادر فعالیت های روتین را انجام داد )

پیاده سازی کلاس های نوشیدنی :

در این مثال ما دو کلاس نوشیدنی بدون کافیین و اسپروسو را پیاده سازی می کنیم

ابتدا به سراغ اسپروسو می رویم :

در این مثال ما از کلاس نوشیدنی ها مشتق گرفته ایم و متد cost() را دوباره نویسی کرده ایم و قیمت نوشیدنی اسپرسو را در آن بازگشت داده ایم. کلاس بعدی نیز کاملا رفتاری مشابه این کلاس را دارد , با این تفاوت که قیمت محصول را به قیمتی جدید تغییر می دهیم

پیاده سازی کلاس های افزودنی ها :

در این بخش کلاس های افزودنی های ممکن برای نوشیدنی ها را از جمله کارامل و شیر سویا را پیاده سازی می کنیم که هر کدام قیمت خاص به خود را داراست

در قطعه کد بالا ما ابتدا نمونه ای از کلاس نوشیدنی ها را ایجاد کرده ایم تا متوجه شویم کدام نوشیدنی با این افزودنی سرو شده است .  در costractor کلاس ما نوع نوشیدنی را دریافت کرده و نمونه ایجاد شده را با نوعی که از ورودی می گیریم مقدار دهی می کنیم.

در آخر در متد دوباره نویسی شده cost() قیمت نوشیدنی را به همراه قیمت این افزودنی به خروجی بازگشت می دهیم. کلاس شیر سویا نیز دقیقا رفتاری مشابه کلاس بالا را دارد.

اجرا :

در آخر برای اجرا فقط کافیست نمونه ای از نوشیدنی ها ایجاد کرده و آن را با افزودنی مقدار دهی کرده و در ورودی init افزودنی کلاس نوشیدنی مورد نظر خود را ارسال کنیم به صورت زیر

در آخر شما می توانید برای دسترسی به مثال به این لینک در گیت هاب مراجعه کنید

2 دیدگاه در “Decorator pattern پیاده سازی دیزاین پترن ها در سویفت

  1. salam
    merc az matalabe khob va mofideton
    man rahe ertebatii sarii az shoma nadidam
    lotf mikonid zire hamin post chand ketab va refrence khob baraye yadgirie bishtar swift va ios moarefi konid??
    mamnon
    ❤️

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.