یکی دیگر از الگو های ساختاری که به ما در ایجاد یک شی از یک کلاس کمک میکند الگوی Factory method است. با استفاده از این متد ما میتوانیم تعیین کنیم که یک شی از روی کدام یک از Subclassهایی که همگی یک اینترفیس را پیاده سازی کرده اند باید ایجاد شود. اطلاعات مورد نیاز برای شناخت کلاس مورد نظر ممکن است به عنوان پارمتر به متد پاس داده شوند و یا از وضعیت کنونی برنامه به دست آیند.
برای مثال یک ماشین نام سازی را در نظر بگیرید. این ماشین میتواند انواع مختلفی از نان را برای شما آماده سازد. مثلا نان بربری، سنگک و باگت. فقط کافی است که مخزن آرد و آب را برای ساخته شدن خمیر پر کنید(interface مشترک بین تمامی Subclassها) سپس از به کمک دکمه های موجود روی ماشین انتخاب میکنید که کدام نوع نان برای شما آماده شود(پارامتر های ورودی و وضعیت کنونی برنامه) و بعد ماشین تشخیص میدهد که چه نوع نانی برای شما آماده و طبخ شود(Factory method).
حالا به سراغ پیاده سازی این الگو میرویم. به مثال زیر دقت کنید.
برای مثال یک ماشین نام سازی را در نظر بگیرید. این ماشین میتواند انواع مختلفی از نان را برای شما آماده سازد. مثلا نان بربری، سنگک و باگت. فقط کافی است که مخزن آرد و آب را برای ساخته شدن خمیر پر کنید(interface مشترک بین تمامی Subclassها) سپس از به کمک دکمه های موجود روی ماشین انتخاب میکنید که کدام نوع نان برای شما آماده شود(پارامتر های ورودی و وضعیت کنونی برنامه) و بعد ماشین تشخیص میدهد که چه نوع نانی برای شما آماده و طبخ شود(Factory method).
حالا به سراغ پیاده سازی این الگو میرویم. به مثال زیر دقت کنید.
class Program
{
static void Main(string[] args)
{
IBread barbari = cookingMachine.Cook(EnumBread.Barbari);
IBread sangak = cookingMachine.Cook(EnumBread.Sangak);
Console.WriteLine(barbari.GetBread());
Console.WriteLine(sangak.GetBread());
}
public enum EnumBread
{
Barbari = 1,
Sangak = 2
}
public class cookingMachine
{
public static IBread Cook(EnumBread breadType)
{
switch (breadType)
{
case EnumBread.Barbari:
return new Barbari();
case EnumBread.Sangak:
return new Sangak();
}
}
}
public interface IBread
{
string GetBread();
}
public class Barbari : IBread
{
public string GetBread()
{
return "Barbari";
}
}
public class Sangak : IBread
{
public string GetBread()
{
return "Sangak";
}
}
}
{
static void Main(string[] args)
{
IBread barbari = cookingMachine.Cook(EnumBread.Barbari);
IBread sangak = cookingMachine.Cook(EnumBread.Sangak);
Console.WriteLine(barbari.GetBread());
Console.WriteLine(sangak.GetBread());
}
public enum EnumBread
{
Barbari = 1,
Sangak = 2
}
public class cookingMachine
{
public static IBread Cook(EnumBread breadType)
{
switch (breadType)
{
case EnumBread.Barbari:
return new Barbari();
case EnumBread.Sangak:
return new Sangak();
}
}
}
public interface IBread
{
string GetBread();
}
public class Barbari : IBread
{
public string GetBread()
{
return "Barbari";
}
}
public class Sangak : IBread
{
public string GetBread()
{
return "Sangak";
}
}
}
در برنامه اصلی تعیین میکنیم که چه نوع نانی را میل داریم، و بعد ماشین پخت پز، نان مورد نظر رو برای ما به کمک پارامتر ورودی طبخ میکنه. نوش جان. صبحانه من هم آماده شد، تا سرد نشده برم صبحانه بخورم.
همین دیگه! تموم شد.
1 نظرات:
ساده و زیبا
ارسال یک نظر