آموزش Builder Pattern

الگوی طراحی Builder به شما کمک می کند که پیچیده ترین اشیاء را به صورت قدم به قدم و به وسیله اشیای ساده تر ایجاد کنید.

آموزش Builder Pattern

Design Patternها راه حل هایی برای مشکلات طراحی نرم افزار است که شما بارها و بارها در توسعه برنامه های کاربردی با آن ها برخورد می کنید. Patternها مربوط به reusable design و تعامل اشیاء هستند.

Builder یک الگوی طراحی سازنده(Creational) است که به شما امکان می دهد قدم به قدم اشیاء پیچیده را بسازید. الگوی Builder به شما کمک می کند که پیچیده ترین اشیاء را به صورت قدم به قدم و به وسیله اشیای ساده تر ایجاد کنید و انواع مختلفی از یک شی را با استفاده از همان ساختار پایه تولید کنید.

آموزش Builder Pattern

Problem

مشکل این است که گاهی نیاز است هنگام ساخت یک شی تعداد زیادی پارامتر را بهconstructor آن تحویل دهیم و این کار برنامه نویسی را بیشتر و خوانایی برنامه را کم میکند. به منظور حل این مشکل از الگوی Builder استفاده میکنیم. در این تکنیک به جای طراحی تعدادی constructor با تعداد زیادی پارامتر از یک شی دیگر استفاده می کنیم که کار پارامتردهی را به صورت مرحله به مرحله و خوانا تر انجام می دهد و در نهایت از نوع شی مورد نظر یک نمونه با تنظیمات خواسته شده را به ما تحویل می دهد.

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

آموزش Builder Pattern

به عنوان مثال ، بیایید در مورد چگونگی ایجاد یک شیء خانه فکر کنیم. برای ساختن یک خانه ساده ، شما باید چهار دیوار و یک کف احداث کنید، یک درب نصب کنید ، یک جفت پنجره را نصب کنید و یک سقف بسازید. برای این کار شما باید یک class خانه ایجاد کنید. اما اگر بخواهید خانه ای بزرگتر ، روشن تر ، دارای حیاط خلوت و سایر امکانات رفاهی (مانند سیستم گرمایش ، لوله کشی و سیم کشی برق) داشته باشید ، چه می کنید؟ آیا به سادگی می توانید همه این امکانات را در کلاس خانه اضافه کنید؟

مسلما خیر! زیرا با ایجاد یک Constructor بزرگ باید تعداد زیادی پارامتر را برای مقدار دهی به Constructor کلاس خانه ارجاع دهید. این عمل باعث افزایش پیچیدگی و کاهش خوانایی کد خواهد شد. همچنین امکان دارد در اغلب موارد، بسیاری از پارامترها استفاده نشده باقی بمانند، که باعث کثیف شدن کدنویسی می شوند. به عنوان مثال، فقط بخشی از خانه ها دارای استخر شنا هستند و بنابراین پارامترهای مربوط به استخر شنا برای ساخت خانه های بدون استخر خالی (null) خواهند ماند.

آموزش Builder Pattern

همچنین شما می توانید انواع امکانات و ساختارهای مختلف را برای خانه ای که در نظر گرفته اید، پیش بینی و شناسایی کنید. پس از شناسایی این موارد، هر کدام از آن ها را یک subclass از کلاس خانه (superclass) در نظر بگیرید. سپس به کمک یک Interface یا کلاس Abstract، کلاس خانه را با کلاس های مورد نظر گسترش می دهید. با این روش اگر در آینده امکانات جدیدی برای افزودن به خانه در نظر گرفته شد، راحت تر می توانید آن ها را پیاده سازی کنید. زیرا در این روش شما یک کلاس خانه دارید که در هر زمان می توانید آن را به وسیله مجموعه ای از کلاس های فرزند گسترش دهید.

شاید از نظر شما این ساده ترین و بهترین راه باشد که کلاس پایه (خانه) را گسترش داده و مجموعه ای از کلاس های فرزند را برای پوشش امکانات مختلف و جدید ایجاد کنید. اما این روش در نهایت شما را با تعداد زیادی از کلاس های فرزند رو به رو می کند. نکته قابل توجه در این روش این است که با اضافه شدن امکانات و پارامترهای جدید، تعداد کلاس های فرزند بیشتر و بیشتر خواهد می شود. برای این منظور رویکرد بهینه ای برای انجام این گونه کارها به وجود آمد که همان الگوی طراحی Builder است.

راه حل بهینه توسط الگوی طراحی Builder

الگوی Builder روشی را برای ساخت اشیا پیچیده پیشنهاد می دهد که روند ساخت آن ها را بسیار ساده تر می کند. در این روش به جای اینکه پارامترهای زیادی به یک Constructor ارسال شود یا از تعداد زیادی Constructor استفاده شود، کلاسی ایجاد می گردد که وظیفه ساخت اشیا را بر عهده بگیرد. برای این کار باید کدهایی که وظیفه ساخت اشیا را بر عهده دارند از کلاس مربوط به اشیا خارج شوند و سپس این کدها باید در کلاس جدیدی قرار گیرند که به آن کلاس Builder می گویند. از این پس، برای ساخت اشیا از کلاس Builder استفاده می شود.

آموزش Builder Pattern

کلاس builder ساخت شی را به مجموعه ای از مراحل (buildWalls ، buildDoor و غیره) تقسیم می کند. مزیت این روش نسبت به روش های قبلی این است که شما برای ساخت یک شی نیازی به انجام تمام مراحل ندارید. بر این اساس برای ساخت یک شی با ساختاری خاص، تنها مراحل مورد نیاز را انجام می دهید. در این حالت ممکن است برخی از مراحل ساخت یک شی نسبت به اشیای دیگر متفاوت باشد. به عنوان مثال، دیوارهای یک کابین ممکن است از چوب ساخته شوند، اما دیوارهای قلعه باید با سنگ ساخته شوند.

آموزش Builder Pattern

UML class diagram

آموزش Builder Pattern

Participants

کلاس ها و اشیاء شرکت کننده در این الگو عبارتند از:

  • Builder

یک abstract interface برای ایجاد بخش هایی از یک شیء Product مشخص می کند.

  • ProductBuilder

با پیاده سازی اینترفیس Builder ، قسمت هایی از محصول را ساخته و مونتاژ می کند.

    • Product

    نمایانگر شیء پیچیده در دست ساخت است.

    ساختار کد در C#

    این کد ساختار الگوی Builder را نشان می دهد که در آن اشیاء پیچیده به روشی گام به گام ایجاد می شوند. فرایند ساخت و ساز می تواند نماهای مختلفی از شی را ایجاد کند و کنترل بالایی بر مونتاژ اشیاء داشته باشد.

    آموزش Builder Pattern آموزش Builder Pattern آموزش Builder Pattern آموزش Builder Pattern

    خروجی کد بالا به شکل زیر می باشد:

    آموزش Builder Pattern
    آموزش الگوی Builder الگوی طراحی Builder آموزش Design Pattern الگوهای طراحی Gang of Four

    مقالات این دسته بندی