תבנית מפעל ב-C++

Tbnyt Mp L B C



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

היכרות עם תבנית המפעל

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

The Factory Pattern הוא תבנית עיצוב יצירתית ב-C++ המאפשרת יצירת אובייקט מבלי להכיר במפורש את המחלקה של האובייקט. הוא מספק דרך להקיף לוגיקה מורכבת של יצירת אובייקט בתוך מחלקה נפרדת של מפעל. זה נעשה על ידי הגדרת ממשק משותף ליצירת אובייקטים, כאשר המחלקה הספציפית של האובייקט נקבעת בזמן הריצה.







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



למה להשתמש בתבנית המפעל?

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



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





הנה כמה מהסיבות הנוספות לכך שתבנית היצרן משמשת ב-C++:

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

דוגמה לתבנית מפעל ב-C++

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



הנה דוגמה לאופן שבו נוכל להשתמש ביישום זה של דפוס המפעל:

#include

באמצעות מרחב שמות std ;

צורה בכיתה {

פּוּמְבֵּי :

וירטואלי בָּטֵל לצייר ( ) = 0 ;

סטָטִי צוּרָה * createShape ( int סוּג ) ;

} ;

מעגל כיתה : צורה ציבורית {

פּוּמְבֵּי :

בָּטֵל לצייר ( ) {

cout << 'לצייר מעגל.' << endl ;

}

} ;

מחלקה מלבן : צורה ציבורית {

פּוּמְבֵּי :

בָּטֵל לצייר ( ) {

cout << 'צייר מלבן.' << endl ;

}

} ;

צוּרָה * צוּרָה :: createShape ( int סוּג ) {

אם ( סוּג == 1 ) {
לַחֲזוֹר מעגל חדש ( ) ;
} אַחֵר אם ( סוּג == 2 ) {
לַחֲזוֹר מלבן חדש ( ) ;
} אַחֵר {
לַחֲזוֹר nullptr ;
}
}


int רָאשִׁי ( ) {

צוּרָה * מעגל = צוּרָה :: createShape ( 1 ) ;

מעגל -> לצייר ( ) ;

צוּרָה * מַלבֵּן = צוּרָה :: createShape ( 2 ) ;

מַלבֵּן -> לצייר ( ) ;

לַחֲזוֹר 0 ;

}

בדוגמה זו, יש לנו מחלקה Shape עם שתי מחלקות נגזרות: עיגול ומלבן. למחלקה Shape יש פונקציה וירטואלית טהורה draw(), אשר מיושמת על ידי המחלקות הנגזרות. למחלקה Shape יש גם פונקציה סטטית createShape(int type), הפועלת כשיטה מפעל ליצירת מופעים של המחלקות הנגזרות על סמך הסוג שצוין. הפונקציה draw() נקראת על האובייקטים שנוצרו כדי להדגים את ההתנהגות הספציפית שלהם.

  תמונה המכילה טקסט, גופן, צילום מסך תיאור נוצר אוטומטית

סיכום

The Factory Pattern הוא תבנית עיצוב יצירתית ב-C++ המאפשרת יצירת אובייקט מבלי להכיר במפורש את המחלקה של האובייקט. הוא מספק ממשק פשוט ליצירת אובייקטים על ידי הסתרת היגיון היצירה המורכב מאחורי מחלקה במפעל. זה נעשה על ידי הגדרת ממשק משותף ליצירת אובייקטים, כאשר המחלקה הספציפית של האובייקט נקבעת בזמן הריצה. קרא עוד על דפוסי מפעל במאמר זה.