الگوی طراحی Abstract Factory، جزء الگوهای طراحی سازنده (Creational) و هدف آن مدیریت ساخت اشیاء است. این الگوی طراحی نرمافزار به شما این امکان را میدهد که خانوادهای از اشیا مرتبط را بدون نیاز به ساخت کلاسهای جداگانه و متعدد ایجاد کنید. Abstract Factory معمولا زمانی استفاده میشود که کاربر به صورت کامل از نوع شیای که می خواهد ایجاد کند، اطلاع نداشته باشد. در این مقاله از ویستا سامانه آسا قصد داریم الگوی طراحی Abstract Factory را بررسی کنیم؛ با ما همراه باشید.
الگوی طراحی Abstract Factory چیست؟
در الگوی Factory که مجموعهای از کلاسها با یک کلاس پدر داشتیم، Method Factory توسط کاربر استفاده میشد و نمونهای از کلاس پدر را دریافت میکرد اما دقیقا نمیدانست چه کلاسهایی در سلسله مراتب کلاسها موجود هستند و معیار انتخاب زیرکلاسها در Factory Method تعیین میشد. الگوی Abstract Factory هم مفهوم Factory Method را دارد، اما در یک سطح بالاتر [۱۲]. بهاینصورت که خانوادهای از اشیا به هم وابسته یا مرتبط به هم را ایجاد میکند؛ پس در این حالت کلاسهای به هم وابستهای داریم که تشکیل یک خانواده را میدهند [۱۱].
به عنوان مثال فرض کنید میخواهید با پایگاه داده ارتباط برقرار کنید. با در نظر گرفتن اینکه در حال استفاده از چند پایگاه داده مختلف هستیم، برای اینکه اتصال با هر پایگاه داده برقرار شود باید از کلاس همان پایگاه داده استفاده و یکی از متدهای آن را فراخوانی کنیم تا ارتباط برقرار شود. زمانی که از این الگو استفاده میکنید، شما مستقیما با کلاسهای پایگاه داده سر و کار ندارید، بلکه یک کلاس به عنوان Factory واسط بین شما و کلاسهای پایگاه داده است. حال اگر بخواهید به پایگاه داده متصل شوید، درخواست خود را به Factory ارسال میکنید تا کلاس پایگاه داده مورد نظر را برای شما ایجاد کند. بنابراین وابستگی به کلاسهای پایگاه داده کمتر شده و مدیریت ساختن این کلاسها در Factory مجتمع میشود. در حالت عادی ایجاد کلاسها در بخشهای مختلف و در کلاسهای مختلف ممکن است انجام شود و مدیریت و تغییر نحوه ایجاد کلاسها در آینده با مشکل مواجه میشود. این الگو برای حل این مشکلات به وجود آمده و شامل مجموعهای ازFactoryهای به هم مرتبط است.
در شکل ۳-۲ کلاس دیاگرام مربوط به این الگو نمایش داده شده و در زیر آن شرکتکنندگان در آن و نقش هریک بیان شده است.
بنابر گفته GoFهدف از الگوي Abstract Factory عبارت است از:
«ارائه یک رابط براي ايجاد خانوادههایي از اشـيا مـرتبط يـا وابسـته، بـدون مشـخص كردن كلاسهای واقعی آنها»
Class Diagram:
- شکل ۳-۲: کلاس دیاگرام الگوی Abstract Factory
نقش کلاسها:
- AbstractFactory: ارائه واسط برای تعریف عملیاتی که AbstractProducts را ایجاد میکند.
- ConcreteFactory: کلاسی که محصول یک خانواده تعریف شده است.
- AbstractProduct: کلاسی که با ارائه یک واسط ساختار محصولات قابل تولید توسط کارخانه را تعریف میکند.
- Product: محصولات واقعی قابل تولید توسط کارخانه است.
- Client: استفاده از واسط ارائه شده توسط کلاسهای AbstractProduct و AbstractFactory.
دیگر ویژگیهای کلیدی Abstract Factory
در جدول ۱ به صورت خلاصه هدف الگو، نام یا نامهای دیگری که الگو با آن شناخته میشود، مواقعی که میتوان از این الگو استفاده کرد، مزایا و معایب استفاده از این الگو و الگوهای مرتبط به این الگو را توضیح دادهایم.
عنوان | شرح |
نام | Abstract Factory Pattern |
هدف | خانوادههایی از اشیا که اعضای خانواده به یکدیگر مرتبط هستند را تولید میکند. |
نامهای دیگر | اين الگو با نام Kit هم شناخته ميشود. |
کاربرد | از این الگو زمانی استفاده میشود که:
|
نتایج | از مزایای این الگو:
از معایب این الگو:
|
الگوهای مرتبط |
|
جدول ۱ : ویژگیهای Abstract Factory
سخن پایانی
در این مقاله سعی شد تا از بین الگوهای طراحی، مدل Abstract Factory را به صورت کامل بررسی و نقات قوت و ضعف آن را بررسی نماییم. در بخش اول به معرفی کلی این الگوی پرداختیم و در آخر ویژگیهای کلیدی Abstract Factory را مطرح کردیم. امید است این نوشته مفید واقع شود. اگر شما هم تجربهای در این زمینه دارید، میتوانید از طریق بخش نظرات با ما در میان بگذارید.
منابع:
- [۱] Muller, Peter. Introduction to Object-Oriented Programming Using C++. Technical report, Globewide Network Academy, 1996.
- [۲] Cooper, James William. Visual Basic design patterns: VB 6.0 and VB. NET. Addison-Wesley Professional, 2002.
- [۳]Martin, Micah, and Robert C. Martin. Agile principles, patterns, and practices in C#. Pearson Education, 2006.
- [۴] Larman, Craig. Applying UML and patterns:an introduction to object-oriented analysis and design and iterative development. Pearson Education India, 2005.
- [۵] Wegner, Peter.”Concepts and paradigms of object-oriented programming.” ACM SIGPLAN OOPS Messenger 1.1 (1990): 7-87.
- [۶] Nirosh, L. W. C. “Introduction to Object Oriented Programming Concepts (OOP) and more.” (2011).
- [۷] E. Gamma, R. Helm, R. Johnson, and J. Vlissides. Design patterns: elements of reusable objectoriented software. Pearson Education, 1994.
- [۸] Moudam, Zakaria, and Noureddine Chenfour. “Design Pattern Support System : Help Making Decision in the Choice of Appropriate Pattern.” Procedia Technology 4 (2012): 355-359.
- [۹] Riehle, Dirk, and Heinz Züllighoven. “Understanding and using patterns in software development.” TAPOS 2.1 (1996): 3-13.
- [۱۰] Gui-lan, He, Wu Sheng, and Yao Jun-Ping. “Application of design pattern in the JDBC programming.” Computer Science & Education (ICCSE), 2013 8th International Conference on. IEEE, 2013.
- [۱۱] Mu, Huaxin, and Shuai Jiang. “Design patterns in software development.” 2011 IEEE 2nd International Conference on Software Engineering and Service Science. 2011.
- [۱۲] “oodesign object oriented ddesign,” http://www.oodesign.com/. Accessed: 2015-04-22.
- [۱۳] Cooper, James W. “Introduction to design patterns in C#.” , Addison-
Wesley, 2002. - [۱۴] Bishop, Judith. C# 3.0 design patterns. ” O’Reilly Media, Inc.”, 2007.
- [۱۵] “CodeProject, ”http://www.codeproject.com/. Accessed:2015-06-26.
- [۱۶] Christopher Alexander. A Pattern Language. First edition. Oxford University
Press,1977. - [۱۷] Rasool, Ghulam, Patrick Maeder, and Ilka Philippow. “Evaluation of design pattern recovery tools.” Procedia Computer Science 3 (2011): 813-819.
- [۱۸] “Data & Object Factory,” http://www.dofactory.com/. Accessed:2015-06-22.
دیدگاهتان را بنویسید