در حال بارگذاری ... .

الگوی طراحی دکوریتور (decorator design pattern)

هدف الگوی طراحی decorator اضافه کردن یا تغییر دادن یک وضعیت یا رفتار در یک کلاس بدون تغییر دادن آن است .تغییر کردن کلاس و بودن از ویژگی های الگوی decorator است که باعث شده این الگوی طراحی یکی از پر کاربرد ترین الگوهای طراحی شی گرا باشد.

مثال زیر را در نظر بگیرید.

در کد بالا کلاس player از interface Player action استفاده کرده و کلاس را پیاده کرده است و دارای یک تابع به نام jump هست که میزان پرش هر بازیکن رو به صورت یک عدد بر می گردونه که در این کد مقدار ۶ هست اش

فرض رو بر این می گیریم که برای هم بازیکن ها این کلاس جواب می ده و در بخش های مختلف برنامه در حال استفاده هست اش و به این سادگی نمی شه این کد رو تغییر داد.اینجاست که این الگو به کمکمون می یاد.

خوب برای این کار راهکار چیه ؟

ما یک کلاس رو بر اساس Interface PlayerAction پیاده سازی می کنیم و اسم اش رو Proplayer می زاریم که اونا اگر ۶ تا می پریدن اینا ۱۶ تا بپرن.

به کد زیر دقت کنید

در این کلاس یک متغییر تعریف کردیم به اسم player .

یک تابع سازنده تعریف کردیم که متغییر از کلاس player رو می گیره و قراره داخل متغییر player که تعریف کرده بودیم ذخیره کنه.

و پیاده سازی تابع jump برای تغییر بر روی مقدار خروجی تابع jump کلاس Player

اگر دقت کنید ورودی سازنده کلاس ProPlayer یک شی از نوع Player است و داخل کلاس Proplayer ما تابع jump رو از کلاس Player صدا می زنیم و داخل تابعی به همون نام در کلاس ProPlayer مقدارش رو دریافت می کنیم و  تغییرات دلخواه رو می دیم و دوباره خروجی رو ایجاد می کنیم.

ما کلاس ProPlayer رو داریم الان می تونیم کلاس هایی رو از این کلاس ارث بری کنیم و داخل اون به کلاس Player از طریق متغییر player دسترسی داریم و می تونیم موارد مختلف رو اضافه کنیم و تغییر بدیم مثلا بگیم اگر بازیکن کفش فلان رو هم داشت به جای ده تا ۲۰ تا بیشتر بپره .

, ,
اشتراک گذاری:

مایل به ثبت دیدگاه هستید؟

آخرین دیدگاه‌ها

آخرین دیدگاه‌ها