خانه / طراحی نرم‌افزار / بررسی الگوی طراحی Abstract Factory

بررسی الگوی طراحی Abstract Factory

بررسی الگوی طراحی Abstract Factory

نویسنده:

زمان مطالعه 7 دقیقه

انتشار:

به‌روزرسانی:

تعداد نظرات: 1

الگوی طراحی 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:

شکل ‏3-2: کلاس دیاگرام الگوی Abstract Factory
شکل ‏۳-۲: کلاس دیاگرام الگوی Abstract Factory

نقش کلاس‌ها:

  • AbstractFactory: ارائه واسط برای تعریف عملیاتی که AbstractProducts را ایجاد می‌کند.
  • ConcreteFactory: کلاسی که محصول یک خانواده تعریف شده است.
  • AbstractProduct: کلاسی که با ارائه یک واسط ساختار محصولات قابل تولید توسط کارخانه را تعریف می‌کند.
  • Product: محصولات واقعی قابل تولید توسط کارخانه است.
  • Client: استفاده از واسط ارائه شده توسط کلاس‌های AbstractProduct و AbstractFactory.

دیگر ویژگی‌های کلیدی Abstract Factory

در جدول ۱ به صورت خلاصه هدف الگو، نام یا نام‌های دیگری که الگو با آن شناخته می‌شود، مواقعی که می‌توان از این الگو استفاده کرد، مزایا و معایب استفاده از این الگو و الگوهای مرتبط به این الگو را توضیح داده‌ایم.

عنوان شرح
نام Abstract Factory Pattern
هدف خانواده‌هایی از اشیا که اعضای خانواده به یکدیگر مرتبط هستند را تولید می‌کند.
نام‌های دیگر اين الگو با نام Kit هم شناخته مي‌شود.
کاربرد از این الگو زمانی استفاده می‌شود که:
  • ساخت محصولاتی که باید از سیستمی که از آن‌ها استفاده می‌کنند مستقل باشند.
  • چند نوع محصول و چند کارخانه‌ی مختلف برای تولید این محصولات داشته باشید.
  • تمایل داشته‌ باشید با خانواده‌های مختلفی از محصولات کار کنید.
نتایج از مزایای این الگو:
  • کلاینت با استفاده از واسطی که در اختیار می‌گیرد نمونه‌ای از کلاس‌های یک خانواده را می‌گیرد؛ بدون نیاز به داشتن شرایط انتخاب کلاس‌های فوق.
  • به دلیل جدا بودن کلاینت از پیاده‌سازی، انتخاب و ایجاد خانواده‌های به هم مرتبط و شرایط انتخاب خانواده‌ها از دید کلاینت پنهان است.
  • به راحتي مي‌توان Concrete Factory مورد استفاده برنامه را تغيير داد، بدون اين که تاثيري در عملکرد ساير بخش‌ها داشته باشد.

از معایب این الگو:

  • عيب بزرگ Abstract Factory اين است که با اضافه شدن فقط يک Product تازه، Abstract Factory بايد تغيير کند که اين مسئله منجر به تغيير همه Concrete Factoryها مي‌شود.
الگوهای مرتبط
  • Factory Method: درصورتی‌که کارخانه‌ی انتزاعی برای هر محصول، چندین انتخاب داشته باشد، می‌تواند آن‌ها را با استفاده از یک متد کارخانه تولید کند.
  • Prototype: در صورتی که الگوی Prototype در کلاس محصول پیاده‌سازی شود، کارخانه‌ی انتزاعی برای تولید محصول می‌تواند یک Prototype manager استخدام کرده و درخواست تولید هر محصول را به مدیر الگو ارجاع بدهد.
  • Singleton: از آنجایی که در سرتاسر برنامه تنها یک نمونه از کارخانه نیاز دارید، می‌توانید الگوی Singleton را هم در کارخانه پیاده‌سازی کنید.

جدول ۱ : ویژگی‌های 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.

با ما همراه شوید!

تیم‌های مختلف آسا در ساختمان‌ها و موقعیت‌های مکانی مختلف آسا مستقر هستند. برای اطلاع از آدرس‌ها و راه‌های ارتباطی با آسا، به صفحه «درباره آسا» مراجعه کنید.

سوالات متداول

دیدگاه‌ها

یک پاسخ به “بررسی الگوی طراحی Abstract Factory”

  1. آرزو نیم‌رخ
    آرزو

    عالی بود ، خیلی ممنون 🙏🏻

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

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