1. ما هو نمط الـ Bridge

1.1 التعريف والمفهوم

نمط الـ Bridge ، المعروف أيضًا بنمط الـ Bridge ، هو نوع من أنماط تصميم الهياكل البرمجية التي تقوم بفصل الابتكار والتنفيذ للسماح لهما بالتغير بشكل مستقل. بمصطلحات بسيطة ، نمط الـ Bridge هو حلاً يفصل الابتكار عن التنفيذ.

1.2 الغرض والتأثير من نمط الـ Bridge

الغرض الرئيسي لنمط الـ Bridge هو فصل جزء الابتكار عن جزء التنفيذ حتى يمكنهما التغيير والتوسع بشكل مستقل. يتم ذلك من خلال إنشاء فئة جسر مجردة مرتبطة بفئة تنفيذ ملموسة.

2. سمات ومزايا نمط الـ Bridge

بعض السمات والمزايا الرئيسية لنمط الـ Bridge تشمل:

  • تحسين قابلية توسيع النظام. يمكن توسيع الابتكار والتنفيذ بشكل مستقل دون التأثير على بعضهما البعض.
  • الامتثال لمبدأ الفتح/الإغلاق. يمكن توسيع جزء الابتكار وجزء التنفيذ بشكل مستقل دون التأثير على بعضهما البعض.
  • شفافية تفاصيل التنفيذ للعميل، مما يسمح بإخفاء تفاصيل التنفيذ عن المستخدم.

3. سيناريوهات تطبيق نمط الـ Bridge

  • عندما ترغب في فصل تنفيذ كائن معقد عن ابتكاره، يمكن استخدام نمط الـ Bridge. قد يكون لهذا تأثير إيجابي على أداء الرمز الموجود، خاصةً عندما يستخدم البرنامج جزءًا فقط من الكائن أثناء التشغيل.
  • عندما تحتاج إلى مشاركة حالات تنفيذ محددة بين عدة كائنات، لكن بالنسبة لرمز العميل، يجب أن تظهر ككائنات مستقلة.

4. تنفيذ نمط الـ Bridge في جو لانغ

4.1 مقدمة إلى رسم الفصول في UML Class Diagram

نمط الـ Bridge في جو لانغ

4.2 خطوات التنفيذ التفصيلية

4.2.1 تحديد واجهة الدور المجرد

أولاً، نحدد واجهة DrawAPI ، ويكون الرمز المحدد كالتالي:

// واجهة الدور المجردة
type DrawAPI interface {
	DrawACircle(radius, x, y int)
}

4.2.2 تنفيذ فئة الدور الملموس

ثم، نحدد فئتي RedCircle وBlueCircle التي تنفذ الطرق في واجهة DrawAPI:

// فئة الدور الملموسة
type RedCircle struct {}

func (c *RedCircle) DrawACircle(radius, x, y int) {
    // منطق رسم دائرة حمراء
}

type BlueCircle struct {}

func (c *BlueCircle) DrawACircle(radius, x, y int) {
    // منطق رسم دائرة زرقاء
}

4.2.3 تحديد واجهة جسر الدور المجرد

تحديد واجهة جسر الشكل:

// واجهة جسر الدور المجردة
type Shape interface {
	Draw()
}

4.2.4 تنفيذ فئة جسر الدور الملموس

تنفيذ فئة Circle ، التي تنفذ واجهة Shape وتحتوي على كائن من نوع واجهة DrawAPI:

// فئة جسر الدور الملموسة
type Circle struct {
    x, y, radius int
    drawAPI      DrawAPI
}

func (c *Circle) Draw() {
    c.drawAPI.DrawACircle(c.radius, c.x, c.y)
}

4.2.5 مثال استدعاء العميل

func main() {
    redCircle := &Circle{100, 100, 10, new(RedCircle)}
    blueCircle := &Circle{100, 100, 10, new(BlueCircle)}

    redCircle.Draw()
    blueCircle.Draw()
}

بهذه الطريقة، قمنا بتنفيذ نمط الـ Bridge في جو لانغ.