ראשי > template method pattern > חלק ראשון
The Template Method

המטרה:
הגדרת שלד של אלגוריתם בתוך פעולה (פונקציה) כלשהי תוך דחייה של חלק ממימוש האלגוריתם ל subclasses. ה template method מאפשרת ל subclasses להגדיר מחדש צעדים מסוימים באלגוריתם מבלי לשנות את מבנה האלגוריתם.

מוטיבציה:
נחשוב על
framework לאפליקציות אשר מספקת את המחלקות Application ו Document. המחלקה Application אחראית לפתיחת מסמכים קיימים שמאוחסנים בפורמט חיצוני, כמו למשל בקובץ. אובייקט Document מייצג את האינפורמציה במסמך לאחר שהיא נקראה מהקובץ.
אפליקציות שנבנות בעזרת ה framework הזו יכולות לבצע subclassing ל Application ול Document כדי להתאים אותם לצרכים ספציפיים. למשל אפליקציית ציור תגדיר את ה subclass ים DrawApplication ו DrawDocument. אפליקציית גיליון אלקטרוני תגדיר את ה subclass ים SpreadsheetApplication ו SpreadsheetDocument. אם אינכם זוכרים כיצד לקרוא את הדיאגרמה הבאה זה הזמן להתרענן.

לחצו להגדלה
לחץ להגדלה - template method exapmle

המחלקה האבסטרקטית Application מגדירה את האלגוריתם הכללי עבור פתיחה וקריאה של מסמך בפעולת ה OpenDocument() שלה:

void Application::OpenDocument (const char* name) {
     if (!CanOpenDocument(name)) {
         // cannot handle this document
         return;
     }
     Document* doc = DoCreateDocument();

     if (doc) {
         _docs->AddDocument(doc);
         AboutToOpenDocument(doc);
         doc->Open();
         doc->DoRead();
     }
}

הפעולות באדום הן פעולות אבסטרקטיות שמוגדרות על ידי subclass ים. OpenDocument() מגדירה כל צעד בדרך לפתיחה של מסמך. היא בודקת אם המסמך ניתן לפתיחה, יוצרת אובייקט Document ספציפי שמתאים לאפליקציה, מוסיפה אותו לקבוצת המסמכים, וקוראת את תוכנו מהקובץ.
אנו קוראים לפעולות מסוגה של OpenDocument() בשם template method. ה template method מגדירה אלגוריתם במונחים של פעולות אבסטרקטיות ש subclass ים דורסים יותר מאוחר על מנת לספק התנהגות מסוימת. ה subclass ים של Application מגדירים באלגוריתם את הצעדים שבודקים האם ניתן לפתוח את המסמך, ושיוצרים את המסמך. ה subclass ים של Document מגדירים את הצעד שקורא את המסמך (כפי שניתן גם לראות בציור - הפעולות שכתובות בכתיב מלוכסן הן הפעולות האבסטרקטיות שממומשות על ידי ה subclass ים). ה template method גם מגדירה פעולה שנותנת ל subclasses של Application לדעת מתי מסמך עומד להיפתח (AboutToOpenDocument()), למקרה שזה מעניין אותם.
בכך שה template method מגדירה מספר צעדים של האלגוריתם כפעולות אבסטרקטיות, ה template method מקבעת את סדר הצעדים , אך היא מאפשרת ל subclass ים של Application ושל Document לשנות צעדים אלה כך שיתאימו לצורכיהם.

למעלה







 
מה בעמוד:
 
המטרה
המוטיבציה