الگوی شیء تهی (Null Object Pattern)

الگوی شیء تهی (Null Object Pattern)

در این مقاله به بررسی جزئیات چهارمین الگوی طراحی خواهیم پرداخت. در خبرنامه های قبلی، به مفاهیم الگوهای تزئین کننده (Decorator)، آداپتور (Adapter) و نما (Facade) پرداختیم.

الگوی شیء تهی چیست؟

این الگو بیان می کند که زمانی که با مقدار تهی (null) برای یک شیء خاص روبرو می شویم، به جای پرتاب استثناء تهی (Null Exception)، یک شیء که نشان دهنده مقدار تهی است را برگردانیم که به عنوان مقدار پیش فرض عمل می کند.

چه زمانی باید از آن استفاده کنیم؟

در دات نت (.NET)، ممکن است در Situationen زیر استفاده از الگوی شیء تهی را در نظر بگیرید:

  • هنگام طراحی رابط ها یا کلاس های انتزاعی، ممکن است بخواهید برای متدهای خاص، پیاده سازی های پیش فرض ارائه دهید. به جای اینکه برای متدهایی که اشیاء را برمی گردانند، null برگردانید، می توانید یک نمونه شیء تهی برگردنید که رفتار پیش فرض را ارائه دهد.
  • در کدی که اغلب قبل از فراخوانی متدها یا دسترسی به ویژگی ها، بررسی ارجاع های تهی را انجام می دهد، استفاده از الگوی شیء تهی می تواند با حذف این بررسی های تهی، به ساده سازی کد کمک کند.
  • اگر کد شما دارای عبارات شرطی زیادی برای مدیریت ارجاع های تهی است، استفاده از الگوی شیء تهی می تواند با ارائه یک رفتار پیش فرض که به طور خودکار هنگام برخورد با اشیاء تهی استفاده شود و به کاهش پیچیدگی چنین منطقی کمک کند.
  • استفاده از پیاده سازی های شیء تهی می تواند با ارائه اشیاء واقعی به جای ارجاع های تهی، امکان unit test را تسهیل کند و راه اندازی سناریوهای تست بدون نگرانی در مورد مسائل مربوط به تهی را آسان تر کند.

این نکته مهم است که در حالی که الگوی شیء تهی در سناریوهای خاص مفید است، ممکن است برای همه موقعیت ها مناسب نباشد. قبل از تصمیم گیری برای استفاده از این الگو، طراحی و الزامات برنامه خود را به دقت در نظر بگیرید.

مثال

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

فرض کنید یک کلاس Country داریم که ممکن است مقدار آن تهی باشد. به طور معمول، سعی می کنیم به ویژگی های یک شیء مانند نام کشور (Country.Name) دسترسی پیدا کنیم. اما اگر Country تهی باشد، با یک استثناء تهی مواجه خواهیم شد.

این مقاله هم برای این مورد مطالعه کردم و برای طراحی این الگو مناسب می باشد .