قصد
یک رابط برای ایجاد خانواده ای از اشیاء مرتبط یا وابسته، بدون مشخص کردن کلاس های concrete آنها، ارائه دهیم.
همچنین به عنوان زیر شناخته می شود
Kit
انگیزه
یک جعبه ابزار رابط کاربری را در نظر بگیرید که از چندین استاندارد look-and-feel مانند Motif و Presentation Manager پشتیبانی می کند. look-and-feelsمختلف ظاهر و رفتارهای مختلفی را برای ” widgets” رابط کاربر مانند scroll bars، پنجره ها و دکمه ها تعریف می کند. برای قابل حمل بودن تمام استانداردهای look-and-feel، یک برنامه نباید ویدجت های خود را برای یک نگاه و احساس خاص hard-code کند. ایجاد کردن نمونه ها از کلاس های look-and-feel-specific از ویدجت ها، توان برنامه برای تغییرات ظاهری و رفتاری در تغییرات بعدی را سخت می کند. ما می توانیم این مشکل را با تعریف یک کلاس انتزاعی WidgetFactory که یک رابط کاربری برای ایجاد هر نوع اساسی از ویجت ما هست، حل کنیم. همچنین یک کلاس انتزاعی برای هر نوع ویجت و زیر کلاس های concrete ویدجت ها برای نگاه و احساس خاص، پیاده سازی می کند. رابط WidgetFactory دارای یک عملیات است که یک شیء ویجت جدید را برای هر کلاس ویجت انتزاعی برمی گرداند. Client ها این عملیات را برای به دست اوردن نمونه های ویجت فراخوانی می کنند، اما Client از کلاس های concrete که استفاده می کنند اگاه نیستند. بنابراین مشتریان مستقل از نگاه و احساس غالب باقی می مانند.
![الگوی طراحی Abstract Factory الگوی طراحی Abstract Factory](https://mohandess.ir/wp-content/uploads/2024/07/image.png)
یک زیر کلاس concrete از WidgetFactory برای هر استاندارد look-and-feel وجود دارد. هر زیرکلاس عملیات هایی برای ایجاد ویجت های مناسب برای ظاهر و احساس پیاده سازی می کند. به عنوان مثال، عملیات CreateScrollBar در MotifWidgetFactory یک نوار پیمایش Motif را نمونه سازی و باز می گرداند، در حالی که عملیات مربوطه در PMWidgetFactory یک نوار اسکرول را برای Presentation Manager باز می گرداند. ایجاد ویدجت مشتریان تنها از طریق رابط WidgetFactory هست و هیچ دانشی از کلاس های که پیاده سازی ویدجت را برای یک look and feel انجام داده اند را ندارند. به عبارت دیگر، کلاینت ها فقط باید به یک رابط که توسط یک کلاس انتزاعی تعریف شده متعهد شوند، نه یک کلاس concrete خاص.
یک WidgetFactory همچنین وابستگی های بین کلاس های ویجت concrete را اعمال می کند. یک نوار پیمایش Motif باید با یک دکمه Motif و یک ویرایشگر متن Motif استفاده شود و این محدودیت به طور خودکار به عنوان یک نتیجه استفاده از MotifWidgetFactory اعمال می شود.
انطباق
از الگوی Abstract Factory زمانی استفاده کنید که:
- یک سیستم باید مستقل از چگونگی ایجاد، ترکیب و نمایندگی محصولات خود باشد.
- یک سیستم باید با یکی از خانواده های متعدد ایجاد شده، پیکربندی شود.
- یک خانواده از اشیاء ایجاد شده مرتبط، طراحی شده است تا با هم استفاده شود و شما باید این محدودیت را اجرا کنید.
- شما می خواهید یک کتابخانه کلاس از محصولات ارائه دهید و به جای پیاده سازی انها می خواهید فقط رابط های انها را نشان دهید.
ساختار
![](https://mohandess.ir/wp-content/uploads/2024/07/image-1.png)