1. ما هو نمط المُنشئ (Builder Pattern)

نمط المُنشئ هو نمط تصميم خلقي يُسمح لك بخلق كائنات معقدة خطوة بخطوة. يُفصل بناء الكائن عن تمثيله ويُسمح بتهيئة توالفات مختلفة من الخصائص والمعلمات حسب الحاجة.

2. سمات ومزايا نمط المُنشئ

تشمل سمات ومزايا نمط المُنشئ ما يلي:

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

3. سيناريوهات تطبيق نمط المُنشئ

نمط المُنشئ مناسب للسيناريوهات التالية:

  • عندما يكون هناك حاجة لبناء كائنات معقدة خطوة بخطوة، يمكن استخدام نمط المُنشئ.
  • عندما تكون عملية بناء الكائن معقدة وهناك العديد من توالفات التهيئة المختلفة، يمكن استخدام نمط المُنشئ.
  • عند إنشاء كائنات ذات تمثيلات مختلفة، يمكن استخدام نمط المُنشئ.

4. تنفيذ نمط المُنشئ في جولانج (Golang)

4.1 رسم تخطيطي للصنف UML

Golang نمط المُنشئ

4.2 الهيكل الأساسي لنمط المُنشئ في جولانج (Golang)

في جولانج (Golang)، يُمكننا استخدام الواجهات والهياكل (interfaces and structs) لتنفيذ الهيكل الأساسي لنمط المُنشئ. فيما يلي مثال للكود:

type Builder interface {
	setPartA()
	setPartB()
	setPartC()
	getResult() *Product
}

type ConcreteBuilder struct {
	product *Product
}

func (b *ConcreteBuilder) setPartA() {
	b.product.partA = "الجزء أ"
}

func (b *ConcreteBuilder) setPartB() {
	b.product.partB = "الجزء ب"
}

func (b *ConcreteBuilder) setPartC() {
	b.product.partC = "الجزء ج"
}

func (b *ConcreteBuilder) getResult() *Product {
	return b.product
}

type Product struct {
	partA string
	partB string
	partC string
}

func (p *Product) show() {
	fmt.Println("الجزء أ:", p.partA)
fmt.Println("الجزء ب:", p.partB)
fmt.Println("الجزء ج:", p.partC)
}

type Director struct {
	builder Builder
}

func (d *Director) construct() {
	d.builder.setPartA()
	d.builder.setPartB()
	d.builder.setPartC()
}

4.3 خلق كائنات معقدة باستخدام نمط المُنشئ

فيما يلي مثال للكود يوضح كيفية خلق كائنات معقدة باستخدام نمط المُنشئ:

builder := &ConcreteBuilder{}
director := &Director{builder: builder}

director.construct()
product := builder.getResult()
product.show()

في الكود أعلاه، نقوم بخلق كائن ConcreteBuilder وكائن Director. ثم، نستخدم كائن Director لاستدعاء طريقة construct لبناء الكائن المعقد تدريجيًا. في النهاية، نستخدم طريقة getResult من كائن المُنشئ للحصول على كائن المنتج المبني وعرض أجزائه المختلفة من خلال طريقة show.

4.4 العلاقة بين نمط المُنشئ وغيره من أنماط التصميم

تشمل العلاقة بين نمط المُنشئ وغيره من أنماط التصميم ما يلي:

  • يُمكن دمج نمط المُنشئ مع نمط المصنع المجرّد (Abstract Factory Pattern) لخلق سلاسل منتجات متعددة.
  • يُمكن دمج نمط المُنشئ مع نمط الهيكلة الغير قابلة للتكرار (Singleton Pattern) لخلق عملية بناء معقدة لكائن منفرد.

بهذا نكون قد انتهينا من الدرس حول نمط طريقة بناء المُنشئ في جولانج. من خلال قراءة هذا الدرس، يجب أن تكون قد فهمت نمط المُنشئ بشكل أفضل وتعرف كيفية تنفيذه في جولانج. نأمل أن يكون هذا الدرس مفيدًا لتعلمك!