لطفا صبر کنید...
دیزاین پترن Bridge




Structural Design Patterns

یکی از زیرشاخه های الگوهای طراحی، Structural Design Patterns است. این الگوها در مورد چگونگی ترکیب اشیاء و کلاس ها بایکدیگر صحبت میکند.

Bridge Design Pattern

دیزاین پترن Bridge  یکی از زیرشاخه های الگوهای طراحی از نوع Structural است.

از دیزاین پترن Bridge یا پل زمانی استفاده میشود که بخواهیم بین انتزاع یا abstraction با پیاده سازی یا implementation یک جداسازی انجام دهیم.

میزان استفاده :  متوسط

طبق معمول از اینترفیس شروع میکنیم. فرض کنید اینترفیسی تحت نام IDrawable داریم که یک متد جهت رسم شکل دارد.

internal interface IDrawable
{
    void Draw();
}

اگر میخواستیم مستقیما کلاس های Circle و … را پیاده سازی کنیم، این کلاس ها را از IDrawable ارث میبردیم و پیاده سازی میکردیم. اما همانطور که گفته شد، قرار است تا بین پیاده سازی و انتزاع یک فاصله ای ایجاد کنیم. جهت ایجاد این فاصله از دیزاین پترن bridge استفاده میکنیم. پس ابتدا یک کلاس با نام Shape ایجاد میکنیم که بین پیاده سازی کلاس های فرزند و اینترفیس قرار میگیرد.

internal abstract class Shape
{
    protected IDrawable drawAPI;
    public Shape(IDrawable drawAPI)
    {
        this.drawAPI = drawAPI;
    }
    public abstract void DrawShape();
}

در این کلاس از سازنده جهت dependency injection استفاده میکنیم و شیئی از نوع IDrawable را میسازیم.

جهت ملموس شدن قضیه کلاس Circle را بصورت زیر مینویسیم.

internal class Circle : Shape
{
    public Circle(IDrawable drawAPI) : base(drawAPI)
    {
    }

    public override void DrawShape()
    {
        drawAPI.Draw();
    }
}

همانطور که در کلاس Circle میبینید، کلاس circle از Shape ارث بری کرده است و از IDrawable بصورت مستقیم ارث بری نکرده و به جای ارث بری از IDrawable آن را از سازنده دریافت کرده.

حال کلاس RedCircle که یک دایره ی قرمز است را بصورت زیر مینویسیم.

internal class RedCircle : IDrawable
{
    public void Draw()
    {
        Console.WriteLine("Red Circle Draw");
    }
}

این کلاس از اینترفیس IDrawable بصورت مستقیم ارث بری کرده.

حال نوبت به فراخوانی در متد main میرسد.

static void Main(string[] args)
{
    try
    {
        Shape circle = new Circle(new RedCircle());
        circle.DrawShape();
    }
    catch (Exception ex)
    {
        ShowError(ex.Message);
    }
    Console.ReadLine();
}

شاید در نگاه اول کمی گیج کننده باشد اما رفته رفته آن را ساده میکنیم.

شیئی از نوع Shape میسازیم.

چون Circle از Shape ارث بری کرده است میتوانیم آن را new کنیم و در این متغیر بریزیم.

کلاس Circle به عنوان ورودی از constructor خود شیئی از نوع IDrawable میخواهد و چون RedCircle از این نوع است میتواند به عنوان ورودی مقدار دهی شود.

و در نهایت از شیء ایجاد شده متد DrawShape را صدا میزنیم.

امیدواریم از دیزان پترن بریج استفاده کافی ببرید.

هولوسن

با من یاد بگیر

آموزش های بیشتر در وبسایت هولوسن : https://holosen.net

نظرات
5.0
(0 نظر)
5
1
4
0
3
0
2
0
1
0
نظرات
**پرسش و پاسخ** سوال خود را مطرح کنید.
در کمتر از 10 دقیقه پاسخگوی شما هستیم

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی علامت گذاری شده اند *

امتیاز:
Captcha Image