קוראים כמוך עוזרים לתמוך ב-MUO. כאשר אתה מבצע רכישה באמצעות קישורים באתר שלנו, אנו עשויים להרוויח עמלת שותף.

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

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

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

כיצד פועלת שיטת התבנית

דפוס שיטת תבנית טיפוסי יהיה בעל המבנה הבא:

סופיבָּטֵלtemplateMethod(){
abstractOperation1();
abstractOperation2();

concreteOperation1();
concreteOperation2();

וו();
}

הדבר הראשון שחשוב לציין הוא ש-templateMethod() הוא סופי, כך שאף תת מחלקה לא יכולה לעקוף את השיטה הזו. הדבר החשוב הנוסף שיש לשים לב אליו הוא שלושת סוגי השיטות שתבנית שיטת התבנית משתמשת בהן: קונקרטי, מופשט והוק.

המחלקה המופשטת שמכילה את שיטת התבנית מיישמת את כל השיטות הקונקרטיות שלה, בעוד שמחלקות המשנה הקונקרטיות מיישמות את השיטות המופשטות שלה. שיטת ה-hook בדרך כלל לא עושה כלום כברירת מחדל, אבל תת-מחלקה יש את היכולת לעקוף את השיטות הללו בעת הצורך.

instagram viewer

הטמעת דפוס שיטת התבנית ב-Java

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

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

פּוּמְבֵּיתַקצִירמעמדמאגר מידע{
// שיטת תבנית
סופיבָּטֵלתבנית מסד נתונים(){
// שיטות מופשטות
setDBDriver();
setCredentials();

// שיטת בטון
לְחַבֵּר();

// שיטות מופשטות
createDB();
setData();
readData();

// שיטות הוק
if (userWantsToUpdate()) {
עדכן מידע();
}

if (userWantsToDelete()) {
deleteData();
}

// שיטת בטון
closeConnection();
}

תַקצִירבָּטֵלsetDBDriver();
תַקצִירבָּטֵלsetCredentials();
תַקצִירבָּטֵלcreateDB();
תַקצִירבָּטֵלsetData();
תַקצִירבָּטֵלreadData();
תַקצִירבָּטֵלעדכן מידע();
תַקצִירבָּטֵללמחוק נתונים();

בָּטֵללְחַבֵּר(){
System.out.println("מתחבר למסד נתונים...");
}

בָּטֵלcloseConnection(){
System.out.println("הורס את חיבור מסד הנתונים...");
}

בוליאניuserWantsToUpdate(){
לַחֲזוֹרשֶׁקֶר;
}

בוליאניuserWantsToDelete(){
לַחֲזוֹרשֶׁקֶר;
}
}

מחלקת Database לדוגמה זו משתמשת בתבנית שיטת התבנית כדי ליצור תבנית שתוכל להשתמש בה עם כל מסד נתונים. כדי להשתמש במסד נתונים, היישום שלך יצטרך להתחבר אליו, ואז להרוס את החיבור לאחר השימוש. פעילויות אלו בדרך כלל זהות עבור כל מסדי הנתונים. לכן, מחלקה מופשטת Database יכולה ליישם את לְחַבֵּר() ו closeConnection() שיטות.

השיטות האחרות בשיטת התבנית יהיו שונות בהתאם לסוג מסד הנתונים. לדוגמה, מסד נתונים של MySQL מאחסן נתונים בטבלאות, בעוד א מסד הנתונים MongoDB מאחסן נתונים באוספים. אם אתה רוצה להשתמש ב- a מסד נתונים של MySQL ב-Java, פשוט צור מחלקה חדשה של MySQL שמרחיבה את מחלקת Database:

פּוּמְבֵּימעמדMySQLמשתרעמאגר מידע{
@עקוף
בָּטֵלsetDBDriver(){
System.out.println("בוחר מנהל התקן MySQL...");
}

@עקוף
בָּטֵלsetCredentials(){
System.out.println("הגדרת אישור מסד הנתונים של MySQL...");
}

@עקוף
בָּטֵלcreateDB(){
System.out.println("יוצר טבלה חדשה...");
}

@עקוף
בָּטֵלsetData(){
System.out.println("מכניס נתונים למסד נתונים...");
}

@עקוף
בָּטֵלreadData(){
System.out.println("מאחזר נתונים ממסד הנתונים...");
}

@עקוף
בָּטֵלעדכן מידע(){
System.out.println("מעדכן נתונים במסד נתונים...");
}

@עקוף
בָּטֵללמחוק נתונים(){
System.out.println("מוחק נתונים ממסד הנתונים...");
}
}

מחלקת MySQL מיישמת את כל השיטות המופשטות של מחלקת Database. זה יכול גם לעקוף כמה שיטות קונקרטיות. עם זאת, זה לא יכול לגעת ב databaseTemplate() שיטה, המשתמשת במילת המפתח הסופית.

פּוּמְבֵּימעמדרָאשִׁי{
פּוּמְבֵּיסטָטִיבָּטֵלרָאשִׁי(מחרוזת[] args){
מסד נתונים mySQLDB = חָדָשׁ MySQL();
mySQLDB‎.databaseTemplate();
}
}

מחלקה ראשית זו יוצרת אובייקט מסד נתונים MySQL חדש ומשתמשת בשיטת התבנית כדי לדמות כיצד יישום יתחבר למסד הנתונים. הפעלת השיטה הראשית מדפיסה את הפלט הבא למסוף:

בפלט, תבחין שהאפליקציה לעולם לא קוראת ל- עדכן מידע() ו deleteData() שיטות. זו הסיבה ששיטות הקרס חשובות. במסד נתונים של SQL, תרצה ליצור טבלאות חדשות, להוסיף נתונים ולהציג את הנתונים שלך. עם זאת, ייתכן שלא תרצה לעדכן או למחוק נתונים. לכן, שיטות ה-hook נותנות לתת-מחלקות את האפשרות לשלוט בהיבטים הקריטיים הללו של האלגוריתם.

@עקוף
בוליאניuserWantsToUpdate(){
לַחֲזוֹרנָכוֹן;
}

פשוט על ידי הוספת הקוד למעלה למחלקת MySQL, האפליקציה מעדכנת כעת את הנתונים במסד הנתונים. אם תפעיל שוב את ה-Main class, היא תציג את הפלט המעודכן הבא:

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

היתרונות של שימוש בתבנית עיצוב שיטת התבנית

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

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