|
|
|
המטרה:
הגדרת ממשק ליצירת אובייקט, כאשר ההחלטה על סוג האובייקט שיווצר מתבצעת על ידי subclass ים של ממשק זה. Factory method מאפשרת ל class לדחות את יצירת האובייקטים ל subclass ים שלו.
ידועה גם בתור: Virtual Constructor
מוטיבציה:
Frameworks משתמשים ב abstract class
ים על מנת להגדיר ולתחזק יחסים בין אובייקטים. לעתים קרובות ה framework אחראית גם ליצירת האובייקטים שלה.
חישבו על framework עבור אפליקציות שיכולות להציג מסמכים עבור המשתמש. שתי האבסטרקציות המרכזיות בה הן המחלקות Application ו Document.
שתיהן מחלקות אבסטרקטיות וקליינט חייב לבצע להן subclassing על מנת להשתמש בהן עבור אפליקציה ספציפית. כדי ליצור אפליקציה לציור, למשל, נגדיר את המחלקות DrawingApplication ו DrawingDocument. המחלקה Application אחראית לטיפול
במסמכים והיא תיצור אותם לפי הצורך - למשל כאשר המשתמש בוחר Open או New מהתפריט שלה.
המחלקה האבסטרקטית Application אינה יכולה לדעת מראש איזה subclass ספציפי של Document היא תצטרך ליצור - זה תלוי אפליקציה - היא יודעת רק מתי היא תצטרך ליצור אותו ולא מאיזה סוג הוא יהיה. אם כן, יש לנו כאן בעיה: ה
framework חייבת לדעת ליצור class ים, אבל היא מכירה רק abstract classes שאותם כמובן לא ניתן ליצור. נראה כסתירה? בעזרת ה factory method המהוללת ניתן לפתור גם סתירות כאלה!!
הפתרון:
ה factory method pattern מציעה דרך לפתרון. היא מרכזת (encapsulate) את הידע של איזה subclass של Document יש ליצור ומעבירה את הידע הזה החוצה מה
framework.
|
לחץ להגדלה - factory method exapmle
|
אם אינכם זוכרים כיצד לקרוא את הדיאגרמה זה הזמן להתרענן.
ה subclass ים של Application מגדירים מחדש את הפעולה האבסטרקטית CreateDocument() על מנת ליצור את סוג המסמך המתאים. כך Application יכולה, ברגע שנוצר subclass שלה, ליצור Documents שהם תלויי אפליקציה מבלי לדעת עליהם מראש. אנו קוראים ל
CreateDocument() בשם factory method מכיוון שהיא אחראית ל"ייצור" של אובייקטים.
|
|
|
|