الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرمافزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفهجویی در زمان و تولید کد های با کیفیت، توسعهپذیر و انعطافپذیر استفاده میکنیم. در این مطلب قصد داریم الگوی طراحی Abstract Factory را معرفی کنیم.
الگوی Abstract Factory یک الگوی طراحی ایجاد کننده(Creational) است که امکان ایجاد مجموعه ای از اشیاء مرتبط یا وابسته را بدون مشخص کردن نوع کلاسهای آنها فراهم میکند. درواقع، این الگو قوانین انتزاعی برای تولید اشیاء را تعریف میکند و با توجه به نیاز در حالات مختلف پیاده سازی میشود.
الگوی Abstract Factory از چندین جزء کلیدی تشکیل شده است:
Abstract Factory: رابطی(Interface) که متد های ایجاد مجموعه ای از اشیاء مرتبط را تعریف می کند. این رابط هیچ گونه جزئیات در ایجاد اشیاء را شامل نمیشود و فقط شامل انتزاعات است.
Concrete Factory: کلاسی که رابط Abstract Factory را پیاده سازی می کند و مجموعه ای از اشیاء مرتبط را ایجاد می کند که با هم کار می کنند. هر Concrete Factory مسئول ایجاد اشیاء برای یک نیاز خاص است.
Abstract Product: رابطی(Interface) که قالب کلی و انتزاعی اشیائی که قرار است تولید شوند را تعریف میکند. نوع اشیائی که توسط Abstract Factory ایجاد میشود از این نوع است.
Concrete Product: کلاسی که رابط Abstract Product را پیاده سازی می کند و جزئیات پیاده سازی مربوط به هر اشیاء را تعریف میکند.
مزیت اصلی الگوی Abstract Factory این است که راهی برای کپسوله کردن ایجاد اشیاء مرتبط به هم ارائه میکند و کاربر را درگیر جزئیات ایجاد اشیاء نمیکند. علاوه بر آن در صورت تغییر در پیاده سازی، کد های کاربر نیاز به تغییر نخواهند داشت.
در ادامه با یک مثال این الگو را بهتر درک میکنیم:
// Abstract Product A
public interface IShape
{
void Draw();
}
// Concrete Product A1
public class Circle : IShape
{
public void Draw()
{
Console.WriteLine("Drawing a Circle");
}
}
// Concrete Product A2
public class Square : IShape
{
public void Draw()
{
Console.WriteLine("Drawing a Square");
}
}
// Abstract Product B
public interface IColor
{
void Fill();
}
// Concrete Product B1
public class Red : IColor
{
public void Fill()
{
Console.WriteLine("Filling with Red");
}
}
// Concrete Product B2
public class Blue : IColor
{
public void Fill()
{
Console.WriteLine("Filling with Blue");
}
}
// Abstract Factory
public interface IShapeAndColorFactory
{
IShape CreateShape();
IColor CreateColor();
}
// Concrete Factory 1
public class CircleAndRedFactory : IShapeAndColorFactory
{
public IShape CreateShape()
{
return new Circle();
}
public IColor CreateColor()
{
return new Red();
}
}
// Concrete Factory 2
public class SquareAndBlueFactory : IShapeAndColorFactory
{
public IShape CreateShape()
{
return new Square();
}
public IColor CreateColor()
{
return new Blue();
}
}
در این مثال دو Abstract Product تحت عنوان IShape و IColor و پیاده سازی آن ها در قالب Circle، Square، Red و Blue را داریم. سپس یک Abstract Factory، به نام IShapeAndColorFactory ایجاد کرده ایم. در ادامه، IshapeAndColorFactory را با دو حالت CircleAndRedFactory و SquareAndBlueFactory پیاده سازی کرده ایم.
رابط IShapeAndColorFactory متد هایی را برای ایجاد یک IShape و یک IColor تعریف می کند و کلاس هایی که آن را پیاده سازی کرده اند، هر کدام روش های خاص خود را برای ایجاد این اشیاء ارائه میکنند.
برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همهی الگو های طراحی میشود، برای شما قرار گرفته است.
من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که مینویسم بدردتون بخوره.
ثبت دیدگاه