מספקת נקודת אחיזה ל subclass ים - יצירת אובייקטים בתוך class בעזרת factory method זו תמיד שיטה יותר גמישה מאשר יצירה שלהם באופן ישיר. factory method נותנת ל subclass ים נקודת אחיזה בשביל לספק גרסאות מורחבות של אובייקטים.
בדוגמה של ה Document מקודם, המחלקה Document יכלה להגדיר factory method שתקרא CreateFileDialog() אשר יוצרת אובייקט ברירת מחדל של תיבת דו-שיח עבור פתיחה של מסמך קיים. ואז subclass של Document יוכל להגדיר תיבת דו-שיח שהיא ספציפית לאפליקציה על ידי דריסה של ה factory method הזו. במקרה זה ה factory method אינה אבסטרקטית, אלא מספקת מימוש ברירת מחדל הגיוני.
מקשרת היררכיות מחלקות מקבילות - בדוגמה שראינו עד כה, ה factory methods נקראות רק על ידי ה Creator ים. אך זה לא חייב להיות המקרה; קליינטים יכולים למצוא בהן שימוש, בעיקר במקרה של היררכיות מחלקות מקבילות.
היררכיות מחלקות מקבילות יכולות להופיע כאשר class מבצע delegation של חלק מתחומי האחריות שלו ל
class נפרד. נשמע מפחיד?? ניתן דוגמה:
חישבו על צורות גרפיות שניתן לשנותן באופן אינטראקטיבי,למשל למתוח, לסובב ולהזיז אותן בעזרת העכבר. מימוש של אינטראקציות כאלו הוא לא תמיד קל. הוא לעתים דורש אחסון ועדכון של אינפורמציה ששומרת נתונים על מצב השינוי בזמן נתון ומעדכנת את עצמה תוך כדי הביצוע של השינוי.
אינפורמציה זו דרושה לנו רק במהלך ביצוע השינוי ולא לאחר מכן. מכיוון שכך אין צורך לשמור אותה כחלק מאובייקט הצורה הגרפית (נקרא לו כאן Figure). יותר מכך, צורות גרפיות שונות מתנהגות שונה בזמן שמבצעים בהן שינוי. למשל, מתיחה של אובייקט קו יכולה לקבל את המשמעות של שינוי נקודת הקצה שלו, בעוד שמתיחה של טקסט יכולה להתבצע כהגדלת הרווחים בין השורות.
עם הגבלות אלו, עדיף להשתמש באובייקט Manipulator נפרד אשר מממש את האינטראקציה ומבצע את השינוי, תוך כדי מעקב על המצב הרגעי של השינוי המתבצע. Figure ים שונים יצטרכו subclass ים שונים של Manipulator כדי לטפל באינטראקציה מסוימת. היררכית ה Manipulator ים המתקבלת היא מקבילה (לפחות באופן חלקי) להיררכיית ה Figure ים. אם אינכם זוכרים כיצד לקרוא את הדיאגרמה הבאה זה הזמן
להתרענן .
לחץ להגדלה - factory method בהיררכיות מקבילות
המחלקה Figure מספקת factory method שנקראת CreateManipulator() ומאפשרת לקליינטים ליצור את ה Manipulator המתאים לכל Figure. ה subclass ים של Figure דורסים אותה ומממשים אותה מחדש כך שתחזיר את ה subclass של Manipulator המתאים להם. באופן אלטרנטיבי, ה Figure יכול לתת מימוש ברירת מחדל כלשהו ל
CreateManipulator() וה subclass ים של Figure פשוט יירשו אותו. יתכן וחלק מהם לא יסתפקו במימוש זה ויממשו אותה מחדש. ה Figure ים שיירשו אותה כמו שהיא לא יצטרכו שיהיה להם Manipulator מיוחד ולכן ההיררכיות הן מקבילות באופן חלקי.
שימו לב כיצד ה factory method מגדירה את הקשר בין שתי היררכיות class ים. היא הופכת את המידע של איזה class ים שייכים אחד לשני למקומי.