Loading AI tools
מוויקיפדיה, האנציקלופדיה החופשית
בתחום הנדסת התוכנה, תבנית Factory Method (שיטת המפעל) היא תבנית עיצוב שתכליתה יצירת אובייקטים החולקים ממשק אחיד מבלי להכיר את המחלקות שלהם. התבנית מתבססת על הגדרת שיטה עצמאית ליצירת עצמים. מחלקות שיורשות יכולות לדרוס את השיטה בשיטה משלהן וכך ניתן לציין את הטיפוס המפורש המתבקש.
מהות תבנית המפעל היא להגדיר ממשק ליצירת עצם תוך מתן האפשרות לתת-המחלקות המממשות את הממשק להחליט לאיזה מחלקה ליצור מופע. יצירת המופע נדחית לתת המחלקות. מקובל להשתמש בתבנית ב-Toolkit וב-Framework שם הקוד צריך לייצר עצמים מסוגים שונים אשר עשויים להיות נורשים על ידי אפליקציות אחרות. כן נעשה שימוש בתבנית כאשר עצמים מהיררכיה אחת נדרשים ליצור אובייקטים מתאימים מהיררכיה אחרת.
פונקציות מפעל מבצעות כימוס (אנקפסולציה) ליצירת עצמים. הדבר שימושי כאשר תהליך היצירה של מחלקה מורכב ותלוי בהרבה גורמים למשל בגורמי תצורה או קונפיגורציה של האפליקציה או בקלט משתמש.
בדוגמה הבאה הפונקציה MazeGame היא פונקציית תבנית המתארת משחק ועושה שימוש ב-Factory Method בשם makeRoom ליצירת חדרים במשחק (בניגוד לצורה הרגילה ליצירת אובייקט של חדר - בעזרת האופרטור new), ובצורה זו לא מכירה את הסוג הספציפי שלהם:
public class MazeGame {
public MazeGame() {
Room room1 = makeRoom();
Room room2 = makeRoom();
room1.connect(room2);
this.addRoom(room1);
this.addRoom(room2);
}
protected Room makeRoom() {
return new OrdinaryRoom();
}
}
במימוש של משחק שונה של MazeGame (ושיורש ממנו) ניתן לעשות שימוש בMazeGame זהה, אך לדרוס את פונקציית makeRoom ולקבל סוג חדר אחר:
public class MagicMazeGame extends MazeGame {
@Override
protected Room makeRoom() {
return new MagicRoom();
}
}
קיימות מספר מגבלות אשר קשורות לשימוש במתודת מפעל ובהן:
Complex c = new Complex(-1, 0);
{{cite book}}
: (עזרה){{cite book}}
: תחזוקה - ציטוט: multiple names: authors list (link)Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.