תבנית מרכב
התבנית המרכבית היא אחת מתבניות עיצוב מבניות. תבנית עיצוב מרכב נעשית שימוש כאשר יש לנו לייצג היררכיה של חלק-כולו.
- רכיב בסיס – רכיב בסיס הוא הממשק לכל האובייקטים בתצורה, תוכנית הלקוח משתמשת ברכיב בסיס כדי לעבוד עם האובייקטים בתצורה. זה יכול להיות ממשק או מחלקה אבסטרקטית עם שיטות משותפות לכל האובייקטים.
- עלה – מגדיר את ההתנהגות של הרכיבים בתרשים. זהו האבן הבנייה של התרשים ומיישם את הרכיב הבסיסי. אין לו הפניות לרכיבים אחרים.
- רכיב מרכזי – מורכב מרכיבי עלה ומיישם את הפעולות ברכיב הבסיסי.
כאן אני מחיל דפוס עיצוב מרכיב עבור תרחיץ הציור.
רכיב מרכזי דפוס מרכיב
רכיב בסיסי של דפוס מרכיב מגדיר את השיטות המשותפות עבור עלה ומרכיבים. אנו יכולים ליצור מחלקה 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
נקודות חשובות של תבנית המורכב
- תבנית המורכב צריכה להיות מיושמת רק כאשר הקבוצה של אובייקטים צריכה להתנהג כאובייקט יחיד.
- התבנית של עיצוב המבנה (Composite) ניתן להשתמש בה כדי ליצור מבנה דומה לעץ. `
` `java.awt.Container#add(Component)
` הוא דוגמה נהדרת לשימוש בתבנית ה-Composite בשפת Java ומשמשת המון ב-Swing. במאמרים קודמים על תבניות עיצוב מבנה:
Source:
https://www.digitalocean.com/community/tutorials/composite-design-pattern-in-java