ראשי > composite pattern > חלק שני
The Composite

המבנה הכללי:
להלן המבנה הכללי של ה composite pattern . כעת לאחר שהתרעננתם קודם לכן, אתם אמורים להיות ספצים בדיאגרמות הבאות אך למקרה שעדיין לא, לחצו
כאן על מנת להיזכר כיצד לקרוא את הראשונה וכאן על מנת להיזכר כיצד לקרוא את השניה.

לחצו להגדלה
לחץ להגדלה - composite



לחצו להגדלה
לחץ להגדלה - מבנה אופייני של אובייקט composite

למעלה
מיהם החברים בחגיגה?:
  • Component (Graphic) - מגדיר את הממשק עבור אובייקטים בהרכבה. מממש התנהגות ברירת מחדל לממשק המשותף לכל ה class ים. מגדיר ממשק לגישה וטיפול בילדים. (אופציונלי) מגדיר ממשק עבור גישה להורה של מרכיב במבנה הרקורסיבי, ומממש אותו אם צריך.
  • Leaf (Rectangle, Line, Text, etc) - מייצג אובייקט שהוא עלה בהרכבה של אובייקט מורכב. אין לו ילדים (כלומר הוא יחידה בסיסית במבנה ההרכבה). מגדיר התנהגות עבור אובייקטים בסיסיים בהרכבה.
  • Composite (Picture) - מגדיר התנהגות עבור אובייקטים שיש להם ילדים. מורכב ממרכיבים פשוטים יותר שהם הילדים שהוא מאחסן. מממש את הפעולות שקשורות לתפעול ילדים מתוך הממשק של Component.
  • Client - מתפעל אובייקטים בהרכבה דרך הממשק שמגדיר Component.
למעלה
מתי נשתמש בcomposite pattern?:
  • כאשר נרצה לייצג היררכיות של אובייקטים מורכבים מהסוג המוזכר למעלה.
  • כאשר נרצה לאפשר ל client להתעלם או לא להיות מודע להבדל בין אובייקטים אינדיבידואלים להרכבות של אובייקטים. ה client יתייחס לכל האובייקטים במבנה של ה Composite באופן אחיד.
למעלה
יחסי העבודה:
  • ה Client משתמש בממשק שמגדיר Component על מנת לתקשר עם אובייקטים במבנה המורכב. אם האובייקט שה client תיקשר איתו הוא עלה, הבקשה מטופלת ישירות על ידיו. אם המקבל הוא Composite, אז לרוב הוא יעביר הלאה את הבקשה לכל ילדיו, כאשר יתכן ויבצע פעולות נוספות לפני או אחרי העברת הבקשה לילדים.
למעלה
יתרונות וחסרונות:
ה Composite pattern:
  • מגדירה היררכיות של מחלקות שמכילות אובייקטים בסיסיים ואובייקטים מורכבים. אובייקטים בסיסיים יכולים להיות מורכבים לאובייקטים יותר מורכבים שבתורם יכולים להיות מורכבים לאובייקטים יותר מורכבים וכן הלאה רקורסיבית. כל פעם שקוד של client מצפה לקבל אובייקט בסיסי הוא יכול לקבל במקומו גם אובייקט מורכב.
  • מפשטת את ה client. ה Client ים מתייחסים לאובייקט בסיסי ולאובייקט מורכב בצורה זהה, ולכן בדרך כלל הם אינם יודעים ולא אכפת להם האם האובייקט הוא בסיסי או הרכבה. כך הקוד של ה client הוא יותר פשוט, כי אין צורך לחלק למקרים ולכתוב קוד לכל אחד בנפרד.
  • קל להוסיף סוגים חדשים של Component ים. כאשר נוסיף Component ים חדשים, בין אם מסוג Leaf ובין אם מסוג Composite, הם יעבדו אוטומטית עם המבנים הקיימים ועם הקוד של הקליינט. אין צורך לשנות שום דבר בקליינט בעת הוספת Component חדש!!
  • עלולה להפוך את הdesign שלנו ליותר מדי כללי. החסרון בכך שקל להוסיף מרכיבים חדשים הוא שקשה יותר לשים הגבלות על המרכיבים של Composite. לפעמים נרצה שיהיו בComposite רק סוגים מסוימים של Components. כשנשתמש בcomposite pattern הדרך היחידה לעשות זאת היא על ידי בדיקות שנעשות בזמן ריצה (למשל dynamic_cast).
למעלה







 
מה בעמוד:
 
המבנה
המשתתפים
מתי נשתמש
יחסי העבודה
בעד ונגד