יישום תבנית שיטת התבנית בג'אווה

1. סקירה כללית

במדריך מהיר זה נראה כיצד למנף את תבנית שיטת התבנית - אחד הדפוסים הפופולריים ביותר של GoF.

זה מקל על הטמעת אלגוריתמים מורכבים על ידי צמצום ההיגיון בשיטה אחת.

2. יישום

כדי להדגים כיצד פועלת תבנית שיטת התבנית, בואו ליצור דוגמה פשוטה המייצגת בניית תחנת מחשב.

בהתחשב בהגדרת התבנית, מבנה האלגוריתם יוגדר בכיתת בסיס המגדירה את התבנית לִבנוֹת() שיטה:

מחלקה מופשטת ציבורית ComputerBuilder {// ... גמר ציבורי buildComputer () {addMotherboard (); setupMotherboard (); addProcessor (); להחזיר מחשב חדש (computerParts); } תקציר ריק ריק addMotherboard (); התקנת חלל מופשטת ציבורית Motherboard (); תקציר ריק ריק addProcessor (); // ...}

ה ComputerBuilder מחלקה אחראית על מתווה הצעדים הנדרשים לבניית מחשב על ידי הצהרת שיטות להוספה והגדרת רכיבים שונים, כגון לוח אם ומעבד.

פה, ה לִבנוֹת() שיטה היא שיטת התבנית, המגדיר את שלבי האלגוריתם להרכבת חלקי המחשב ומחזיר אתחול מלא מַחשֵׁב מקרים.

שימו לב שאניהוכרז כ- סופי כדי למנוע את דריסתו.

3. בפעולה

כשכיתת הבסיס כבר מוגדרת, ננסה להשתמש בה על ידי יצירת שתי מחלקות משנה. אחד הבונה מחשב "סטנדרטי" והשני הבונה מחשב "יוקרתי":

מחלקה ציבורית StandardComputerBuilder מרחיב את ComputerBuilder {@Override public void addMotherboard () {computerParts.put ("לוח אם", "לוח אם רגיל"); } @ עקוף חלל ציבורי setupMotherboard () {motherboardSetupStatus.add ("הברגת לוח האם הסטנדרטי למארז."); motherboardSetupStatus.add ("חיבור מחברי אספקת החשמל."); motherboardSetupStatus.forEach (שלב -> System.out.println (שלב)); } @ ביטול חלל ציבורי addProcessor () {computerParts.put ("מעבד", "מעבד רגיל"); }}

והנה HighEndComputerBuilder גִרְסָה אַחֶרֶת:

מחלקה ציבורית HighEndComputerBuilder מרחיב את ComputerBuilder {@Override public void addMotherboard () {computerParts.put ("לוח אם", "לוח אם מתקדם"); } @Override public void setupMotherboard () {motherboardSetupStatus.add ("הברגת לוח האם היוקרתי למארז."); motherboardSetupStatus.add ("חיבור מחברי ספק הכוח."); motherboardSetupStatus.forEach (שלב -> System.out.println (שלב)); } @Override הריק הציבורי addProcessor () {computerParts.put ("מעבד", "מעבד יוקרתי"); }}

כפי שאנו רואים, לא היינו צריכים לדאוג לכל תהליך ההרכבה אלא רק לספק יישומים לשיטות נפרדות.

עכשיו בואו נראה את זה בפעולה:

StandardComputerBuilder חדש () .buildComputer (); .getComputerParts () .forEach ((k, v) -> System.out.println ("חלק:" + k + "ערך:" + v)); HighEndComputerBuilder חדש () .buildComputer (); .getComputerParts () .forEach ((k, v) -> System.out.println ("חלק:" + k + "ערך:" + v));

4. שיטות תבנית בספריות הליבה של Java

דפוס זה נמצא בשימוש נרחב בספריות הליבה של Java, למשל על ידי java.util.AbstractList, או java.util.AbstractSet.

לדוגמה, רשימת תקצירים מספק יישום שלדי של רשימה מִמְשָׁק.

דוגמה לשיטת תבנית יכולה להיות ה- הוסף הכל() שיטה, למרות שהיא לא מוגדרת במפורש כ- סופי:

addAll ציבור בוליאני (int index, אוסף c) {rangeCheckForAdd (index); בוליאני שונה = שקר; עבור (E e: c) {add (index ++, e); שונה = נכון; } להחזיר שונה; }

משתמשים צריכים רק ליישם את לְהוֹסִיף() שיטה:

הוסף חלל ציבורי (אינדקס int, אלמנט E) {זרוק UnsupportedOperationException חדש (); }

כאן, באחריות המתכנת לספק יישום להוספת אלמנט לרשימה באינדקס הנתון (החלק הווריאטיבי של אלגוריתם הרישום).

5. מסקנה

במאמר זה הצגנו את תבנית שיטת התבנית וכיצד ליישם אותה ב- Java.

תבנית שיטת התבנית מקדמת שימוש חוזר וקישור של קוד, אך על חשבון השימוש בירושה.

כמו תמיד, כל דגימות הקוד המוצגות במאמר זה זמינות ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found