کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

Design Patterns-الگوی Facade

Facade

در ادامه مبحث الگوهای طراحی، در این مقاله قصد داریم درباره یکی از الگوهای طراحی ساختاری با نام Facade صحبت کنیم.
در صورتی که مقالات قبلی را مطالعه نکرده اید، از طریق لینک های زیر قابل دسترس هستند:


گروه GOF این الگو را به اینصورت تعریف می کنند که: "یک اینترفیس واحد برای مجموعه ای از اینترفیس های SubSystem فراهم می کند. Facade یک اینترفیس سطح بالاتر است که استفاده از SubSystem را راحت تر می کند."
خوب حال بیائید معنی این تعریف را بهتر درک کنیم. درواقع زمانی که شما چندین SubSystem یا کلاس دارید، برای client سخت خواهد بود که با تمام آنها تعامل داشته باشد و اگر به هر ترتیبی client موفق به مدیریت این تعاملات بشود، کدهای ما خیلی پیچیده و درهم می شود و امکان نگهداری را برای تغییرات آتی سخت خواهد کرد.


چگونگی عملکرد Façade Pattern

درواقع Facade برای حل چنین مشکلی یک راه حل ارائه می دهد و آن هم این است که یک اینترفیس (یا یک کلاس پوشاننده-Wrapper) ساخته می شود تا برای رفع تمام درخواست های Client، با client در ارتباط باشد. این کلاس پوشاننده از داخل تمام پیچیدگی های تعاملات با سایر Sub- Systemها را مدیریت می کند.
بیائید با یک مثال ساده با این الگو بیشتر آشنا شویم. همان مثال ماشین را برای نمایش مفهوم در نظر بگیرید. در ابتدا اجازه دهید یکسری کلاس های SubSystem بسازیم:


class Body

{

   public void AssembleBody()

   {

       Console.WriteLine("Assembling Body...");

   }

}

 

class Engine

{

   public void AssembleEngine()

   {

       Console.WriteLine("Assembling Engine...");

   }

}

 

class Tyre

{

   public void AssembleTyre()

   {

       Console.WriteLine("Assembling Tyre...");

   }

}

 

class Accessories

{

   public void AssembleSeat()

   {

       Console.WriteLine("Assembling Seat...");

   }

 

   public void AssembleMusicSystem()

   {

      Console.WriteLine("Assembling Music System...");

   }

} 

تا اینجا Sub-System ها ساخته شدند. حال بیائید کلاس Facade را طراحی کنیم. قرار است در این کلاس یکسری متد Public تعریف شود که با فراخوانی آنها با client صحبت کند(تعامل داشته باشد)!


class CarFacade

{

   Body body;

   Engine engine;

   Tyre tyre;

   Accessories accessories;

 

   public CarFacade()

   {

       body = new Body();

       engine = new Engine();

       tyre = new Tyre();

       accessories = new Accessories();

   }

 

   public void AssembleCar()

   {

       Console.WriteLine("Car Assembling Started...");

       body.AssembleBody();

       engine.AssembleEngine();

       tyre.AssembleTyre();

       accessories.AssembleSeat();

       accessories.AssembleMusicSystem();

       Console.WriteLine("Car Assembling Done...");

   }

} 

همانطور که مشاهده می کنید، در کلاس CarFacade، یک متد با نام AssembleCar وجود دارد که در دسترس client نیز خواهد بود. در متد AssembleCar، پیچیدگی تعامل با sub-Systemهایی مانند Body، Engine و ... مدیریت می شود.
حال ببینیم چطور client از این تنظیمات استفاده می کند:


static void Main()

{

   Console.Title = "Facade pattern demo";

   CarFacade carFacade = new CarFacade();

   carFacade.AssembleCar();

} 

خروجی:


آموزش Entity FrameWork 

به همراه Design Pattern

همانطور که مشاهده می کنید، client فقط در مورد متد AssembleCar در facade می داند و بدون اینکه خودش را درگیر پیچیدگی های Sub-Systemها کند، با موفقیت عمل سرهم بندی (Assemble) کردن ماشین را پشت سر می گذارد.
نمودار کلاس:


آموزش Entity FrameWork 

به همراه Design Pattern
1395/02/05 10534 1720
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...