تبلیغات

الگوی طراحی فکتوری (Factory) در جاوا

Singleton

الگوی طراحی فکتوری (Factory = کارخانه)، زمانی استفاده می‌شود که ما یک کلاس پدر با چندین کلاس فرزند داشته باشیم و براساس ورودی، یکی از کلاس‌های فرزند را بارگزاری کنیم. این الگو، مسئولیت نمونه‌گیری (ایجاد نمونه = Instantiation) از یک کلاس را، از خود کدهای اصلی برنامه، به داخل کلاس فکتوری (Factory Class) منتقل می‌کند.

این الگوی طراحی، به Factory Method Design Pattern نیز معروف است.

الگوی طراحی فکتوری در جاوا

این الگو، به طور گسترده‌ای در JDK جاوا استفاده شده است. ابتدا اجازه دهید تا با نحوه‌ی ‌پیاده‌سازی این الگوی طراحی در جاوا آشنا شویم؛ و سپس مزایای استفاده از آن را خواهیم گفت. همچنین به برخی موارد استفاده شده از این الگو در JDK نیز نگاهی خواهیم انداخت.

Super Class/کلاس پدر

Super Class یا کلاس پدر، در الگوی طراحی فکتوری، می‌تواند یک رابط (اینترفیس = Interface)، کلاس انتزاعی (abstract class) و یا یک کلاس عادی جاوا باشد. برای مثال، ما یک کلاس انتزاعی خواهیم داشت که در آن، متد toString نیز اووراید شده است.

Sub Classes/کلاس‌های فرزند

فرض کنید ما دو کلاس فرزند به نام‌های PC و Server داریم؛ که به صورت زیر پیاده‌سازی شده‌اند:

توجه داشته باشید که هردوی این کلاس‌ها، از کلاس پدر که در اینجا Cmputer است، مشتق شده‌اند.

Factory Class

حالا که کلاس پدر و فرزندان آن را داریم، می‌توانیم کلاس فکتوری خود را پیاده کنیم. یک پیاده‌سازی ابتدایی از آن را در زیر می‌بینید:

برخی از نکات مهم درباره‌ی الگوی طراحی کارخانه عبارتند از:

  • ما می‌توانیم کلاس فکتوری را به صورت سینگلتون نگهداری کنیم؛ و یا می‌توانیم متدی که کلاس‌های فرزند را برمیگرداند، به صورت static تعریف کنیم (همانند بالا).
  • توجه داشته باشید که براساس پارامتر ورودی، کلاس‌های متفاوتی ممکن است ایجاد و برگردانده شوند. و getComputer، متد کارخانه است.


حالا در زیر، یک مثال ساده‌ای از نحوه‌ی استفاده از الگوی طراحی فکتوری بالا را پیاده‌سازی کرده‌ایم:

خروجی این کد به صورت زیر خواهد بود:

Factory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz
Factory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz

مثال‌های فکتوری در JDK

  • کلاس java.util.Calendar و ResourceBundle و متدهای NumberFormat getInstance()،
  • متد valueOf()، در کلاس‌های wrapper مثل Boolean، Integer و …
تبلیغات
0
کانال تلگرام فول کده
تبلیغات

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

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک گذاری اطلاعات در هر زمینه‌ای / برنامه‌نویس / مدیر فول کده

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده بدون دیدگاه