سلام دوستان عزیز وهمراهان گرامی از اینکه مارا همراهی میکنید از شما سپاسگذاریم ، حال شما چطوره؟ امیدوارم که خوب و خوش و سلامت با یکی دیگر از اموزشهای ما که این بار در مورد design pattern میباشد با من همراه باشید .امروز میخوام در مورد Abstract Factory صحبت کنم امیدورام که برایتان مفید واقع گردد.
در این مقاله به نوع دیگری از Factory design pattern می پردازیم به نام Abstract Factory. اجازه دهید قبل از پرداختن به بحث پیاده سازی، هدف از abstract factory pattern را توضیح دهیم.
در صورتی که مقالات قبلی را مطالعه نکرده اید، از طریق لینک زیر قابل دسترس هستند:

· Design Patterns

· Singleton Pattern

· Simple Factory Pattern

درواقع Abstract factory pattern مرحله بعد از Simple Factory pattern است که در آن Factoryهای مرتبط به هم و یا کلاس های هم خانواده را مشخص می کنیم.

برای درک بهتر، مثال قبل را در مقاله Simple Factory pattern به خاطر بیاورید. در Simple Factory Pattern، ما تمام برندهای ماشین ها را با یک interface مدیریت کردیم. فرض کنید مصرف کننده یا client ماشین، با انتخاب برند ماشین، وارد مرحله جدیری از طبقه بندی شود.

در چنین مواقعی با Abstract Family سرو کار خواهیم داشت. این pattern خانواده ای از کلاس ها یا factoryهای مرتبط ایجاد میکند تا پاسخگوی نیاز ما باشد.
چطور از Abstract Factory Pattern استفاده کنم؟

فرض کنید client می خواهد جزئیات ماشین برند های مختلف را بداند. این جزئیات عبارتند از هزینه و حق بیمه مدل ها. پس باید یک Abstract product Interface به شکل زیر تعریف کنیم:

interface IEconomy

{

string ShowEconomy();

}

interface IPremium

{

string ShowPremium();

}

چون می خواهیم جزئیات ماشین را با توجه به برند ماشین نشان دهیم، باید یکسری کلاس های واقعی بسازیم که از Interface فوق استفاده کنند.

class Alto : IEconomy

{

public string ShowEconomy()

{

return “Alto”;

}

}

class SCross : IPremium

{

public string ShowPremium()

{

return “S-Cross”;

}

}

class Eon : IEconomy

{

public string ShowEconomy()

{

return “Eon”;

}

}

class Elantra : IPremium

{

public string ShowPremium()

{

return “Elantra”;

}

}

حالا باید یک اینترفیس abstract factory بسازیم که اینترفیس های abstract product، را که برای تعریف جزئیات ماشین ایجاد شده اند، تطبیق دهد.

interface ICarFactory

{

IEconomy GetEconomy();

IPremium GetPremium();

}

حالا وقت آن رسیده است که یک خانواده از کلاس های واقعی بسازیم تا از brandهای مختلف پشتیبانی کند. قطعاً این کار با پیاده سازی ICarFactory انجام می شود:

class MarutiFactory : ICarFactory

{

public IEconomy GetEconomy()

{

return new Alto();

}

public IPremium GetPremium()

{

return new SCross();

}

}

class HyundaiFactory : ICarFactory

{

public IEconomy GetEconomy()

{

return new Eon();

}

public IPremium GetPremium()

{

return new Elantra();

}

}

حالا به جایی رسیده ایم که می توانیم از تنظیماتی که قبلاً ایجاد کرده ایم، استفاده کنیم:

Console.Title = “Abstract Factory pattern demo”;

ICarFactory carFactory = null;

IEconomy economy = null;

IPremium premium = null;

//Maruti

carFactory = new MarutiFactory();

economy = carFactory.GetEconomy();

premium = carFactory.GetPremium();

Console.WriteLine(“Normal car is: ” + economy.ShowEconomy() + “\nPremium Car is: ” + premium.ShowPremium());

خروجی:

آموزشگاه برنامه نویسی تحلیل داده

//Hyundai

carFactory = new HyundaiFactory();

economy = carFactory.GetEconomy();

premium = carFactory.GetPremium();

Console.WriteLine(“Normal car is: ” + economy.ShowEconomy() + “\nPremium Car is: ” + premium.ShowPremium());

خروجی:

آموزشگاه برنامه نویسی تحلیل داده

نمودار کلاس:

آموزشگاه برنامه نویسی تحلیل داده

همانطور که در کد فوق مشاهده می کنید client، شی car factory مورد نیاز را با ساخت یک نمونه از برند Car factory مرتبط، دریافت میکند و سپس شی اینترفیس مورد نیاز را با فراخوانی متد car factory مرتبط ، دریافت می کند تا بعداً بتواند متدهای product interface ، نظیر ShowEconomy و ShowPremium، را فراخوانی کند.

۸۷
۰
تاریخ ارسال: ۱۳۹۵/۰۲/۰۵
برای دانلود ابتدا باید وارد سایت شوید
پس از دانلود فایل رمز آن را به دقت وارد نمایید .فایل ها دارای رمز عبور می باشند.

tahlildadeh.com یا www.tahlildadeh.com
Design Patterns-الگوی Abstract Factory
Design Patterns-الگوی Factory Method
Design Patterns-الگوی Simple Factory
لطفا به این مطلب امتیاز دهید
با ثبت امتیاز به دیگران کمک کنیم تا انتخاب بهتری نمایند
۰
۰ ۰
ارسال دیدگاه
شماره موبایل
پست الکترونیک
عنوان
دیدگاه
نظرات کاربران