نمط التصميم المركب
النمط المركب هو واحد من أنماط التصميم الهيكلية. يُستخدم نمط التصميم المركب عندما نحتاج إلى تمثيل تسلسل جزء-كل.
- المكون الأساسي – المكون الأساسي هو الواجهة لجميع الكائنات في التكوين. يستخدم برنامج العميل المكون الأساسي للعمل مع الكائنات في التكوين. يمكن أن يكون واجهة أو فئة مجردة مع بعض الطرق المشتركة بين جميع الكائنات.
- الورقة – تعرف السلوك للعناصر في التكوين. إنه الوحدة الأساسية للتكوين وينفذ المكون الأساسي. لا تحتوي على مراجع لمكونات أخرى.
- المركب – يتألف من عناصر الورق وينفذ العمليات في المكون الأساسي.
هنا أقوم بتطبيق نمط التصميم المركب لسيناريو الرسم.
مكون قاعدة نمط التصميم المركب
يعرف مكون قاعدة نمط التصميم المركب الأساليب الشائعة للورقة والمركبات. يمكننا إنشاء فئة Shape
مع طريقة draw(String fillColor)
لرسم الشكل بلون معين. Shape.java
package com.journaldev.design.composite;
public interface Shape {
public void draw(String fillColor);
}
كائنات ورقة نمط التصميم المركب
ينفذ ورقة نمط التصميم المركب المكون الأساسي وهذه هي الوحدات الأساسية للمركب. يمكننا إنشاء عدة كائنات ورقة مثل المثلث والدائرة وما إلى ذلك. Triangle.java
package com.journaldev.design.composite;
public class Triangle implements Shape {
@Override
public void draw(String fillColor) {
System.out.println("Drawing Triangle with color "+fillColor);
}
}
Circle.java
package com.journaldev.design.composite;
public class Circle implements Shape {
@Override
public void draw(String fillColor) {
System.out.println("Drawing Circle with color "+fillColor);
}
}
كائن مركب
A composite object contains group of leaf objects and we should provide some helper methods to add or delete leafs from the group. We can also provide a method to remove all the elements from the group. Drawing.java
package com.journaldev.design.composite;
import java.util.ArrayList;
import java.util.List;
public class Drawing implements Shape{
//مجموعة من الأشكال
private List shapes = new ArrayList();
@Override
public void draw(String fillColor) {
for(Shape sh : shapes)
{
sh.draw(fillColor);
}
}
//إضافة شكل إلى الرسم
public void add(Shape s){
this.shapes.add(s);
}
//إزالة الشكل من الرسم
public void remove(Shape s){
shapes.remove(s);
}
//إزالة كل الأشكال
public void clear(){
System.out.println("Clearing all the shapes from drawing");
this.shapes.clear();
}
}
لاحظ أن الكائن المركب ينفذ أيضًا واجهة العنصر ويتصرف بشكل مماثل للورقة باستثناء أنه يمكن أن يحتوي على مجموعة من عناصر الورقة. تم إنشاء تنفيذ نمط الكائن المركب لدينا ويمكننا اختباره ببرنامج عميل.
برنامج عميل تصميم الكائن المركب
TestCompositePattern.java
package com.journaldev.design.test;
import com.journaldev.design.composite.Circle;
import com.journaldev.design.composite.Drawing;
import com.journaldev.design.composite.Shape;
import com.journaldev.design.composite.Triangle;
public class TestCompositePattern {
public static void main(String[] args) {
Shape tri = new Triangle();
Shape tri1 = new Triangle();
Shape cir = new Circle();
Drawing drawing = new Drawing();
drawing.add(tri1);
drawing.add(tri1);
drawing.add(cir);
drawing.draw("Red");
drawing.clear();
drawing.add(tri);
drawing.add(cir);
drawing.draw("Green");
}
}
إخراج برنامج العميل أعلاه لنمط الكائن المركب هو:
Drawing Triangle with color Red
Drawing Triangle with color Red
Drawing Circle with color Red
Clearing all the shapes from drawing
Drawing Triangle with color Green
Drawing Circle with color Green
نقاط هامة في نمط الكائن المركب
- يجب تطبيق نمط الكائن المركب فقط عندما ينبغي لمجموعة الكائنات أن تتصرف ككائن واحد.
- نمط التصميم المركب يمكن استخدامه لإنشاء هيكل شبيه بشجرة.
java.awt.Container#add(Component)
هو مثال رائع على نمط المركب في جافا ويستخدم كثيرًا في Swing. المقالات السابقة حول أنماط التصميم الهيكلية:
Source:
https://www.digitalocean.com/community/tutorials/composite-design-pattern-in-java