معرفی الگوی طراحی Abstract Factory

معرفی الگوی طراحی Abstract Factory

مدت مطالعه : 3 دقیقه

18 فروردین 1402

الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرم‌افزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفه‌جویی در زمان و تولید کد های با کیفیت، توسعه‌پذیر و انعطاف‌پذیر استفاده می‌کنیم. در این مطلب قصد داریم الگوی طراحی 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 تعریف می کند و کلاس هایی که آن را پیاده سازی کرده اند، هر کدام روش های خاص خود را برای ایجاد این اشیاء ارائه می‌کنند. 

 

برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همه‌ی الگو های طراحی می‌شود، برای شما قرار گرفته است.

design patterns

ایجاد کننده (Creational):الگوی طراحی Factory 
الگوی طراحی Builder 
الگوی طراحی Singleton 
الگوی طراحی Prototype 
الگوی طراحی Abstract Factory 
ساختاری (Structural):الگوی طراحی Adapter 
الگوی طراحی Bridge 
الگوی طراحی Composite 
الگوی طراحی Decorator 
الگوی طراحی Facade 
الگوی طراحی Flyweight 
الگوی طراحی Proxy 
رفتاری (Behavioral):الگوی طراحی Chain of Responsibility 
الگوی طراحی Command 
الگوی طراحی Interpreter 
الگوی طراحی Mediator 
الگوی طراحی Memento 
الگوی طراحی Observer 
الگوی طراحی State 
الگوی طراحی Strategy 
الگوی طراحی Template Method 
الگوی طراحی Visitor 
الگوی طراحی Iterator 
  • اشتراک گذاری:
محمدرضا باباخانی
محمدرضا باباخانی

من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که می‌نویسم بدردتون بخوره.

آخرین مطالب

سرویس مش؛ ساده سازی ارتباطات میکروسرویس و افزایش رؤیت پذیری

در چشم انداز همیشه در حال تحول توسعه نرم افزار، معماری میکروسرویس ها به دلیل مقیاس پذیری، انعطاف پذیری و توسعه پذیری محبوبیت قابل توجهی به دست آورده است. با این حال، با افزایش تعداد میکروسرویس ها در یک برنامه، مدیریت ارتباطات آنها و اطمینان از رؤیت صحیح همه آنها به طور فزاینده ای چالش برانگیز می شود. اینجاست که سرویس مش وارد عمل می شود.

اهمیت محاسبات لبه یا Edge Computing

ا توجه به سرعت تحول فناوری، یکی از مفاهیمی که توجه زیادی را به خود جلب کرده و نحوه تعامل ما با سیستم های دیجیتال را تغییر می دهد، محاسبات لبه (Edge Computing) است.

معماری رویداد محور چیست؟

معماری رویداد محور (EDA) یک الگوی طراحی نرم افزار است که در توسعه نرم افزار های مدرن به طور چشمگیری محبوب شده است. در این معماری، جریان داده ها با وقوع رویدادها تعیین می شود. بر خلاف سیستم های متمرکز سنتی که دائماً در حال بررسی وضعیت جدید هستند. معماری رویداد محور به ویژه برای سیستم هایی مفید است که به پردازش حجم زیادی از داده ها بصورت بلادرنگ(real-time) نیاز دارند.

ثبت دیدگاه