תבנית העיצוב של Builder מקפלת את המאפיינים של אובייקט ומאפשרת לך לבנות ייצוג שלו. דפוס זה מאפשר לבנות אובייקטים מורכבים, בעלי מאפיינים שונים למרות שהם שייכים לאותה מחלקה.
מחלקת אובייקט טיפוסית מכילה תכונות, בנאים ושיטות. תבנית ה-Builder מאפשרת לחלץ את לוגיקת הבנייה ממחלקת האובייקטים ולמקם אותה במחלקות הנקראות בונים. לאחר מכן תוכל להשתמש במחלקות בונה אלה כדי ליצור וריאציות שונות של אותו אובייקט.
הטמעת דפוס ה-Builder ב-Java
דוגמה טובה לדפוס הבנאי היא מערכת הזמנת פיצה המאפשרת ללקוחות לבחור אפשרויות תוספת שונות.
מחלקת המוצרים
גישה אחת היא להפוך את הבונה לממשק, אבל תצטרך ליצור תחילה מחלקת מוצר. המוצר ביישום לדוגמה זה הוא פיצה.
פּוּמְבֵּימעמדפיצה{
// נכסים
פְּרָטִיint מספר הזמנה;
פְּרָטִי חוּט בצק פיצה;
פְּרָטִי חוּט ציפוי;
// גטרים וקובעים
פּוּמְבֵּיintgetOrderNumber(){
לַחֲזוֹר מספר הזמנה;
}
פּוּמְבֵּיבָּטֵלsetOrderNumber(int מספר הזמנה){
זֶה.orderNumber = orderNumber;
}
פּוּמְבֵּי חוּט getPizzaDough(){
לַחֲזוֹר בצק פיצה;
}
פּוּמְבֵּיבָּטֵלsetPizzaDough(מחרוזת בצק פיצה){
זֶה.pizzaDough = pizzaDough;
}
פּוּמְבֵּי חוּט getTopping(){
לַחֲזוֹר ציפוי;
}
פּוּמְבֵּיבָּטֵלsetTopping(ציפוי מחרוזת){
זֶה.topping = ציפוי;
}
}
כיתת הבנאים
הפיצה שיעור Java יש לו שלושה מאפיינים והגטרים והקבעים שלהם, אבל אין שיטות קונסטרוקטור. ממשק הבונה יאפשר לך ליצור כל היבט של אובייקט הפיצה בנפרד. לאחר מכן זה יאפשר לך לאחזר את כל חפץ הפיצה.
פּוּמְבֵּימִמְשָׁקבּוֹנֶה{
פּוּמְבֵּיבָּטֵלליצור בצק פיצה();
פּוּמְבֵּיבָּטֵלcreateTopping();
פּוּמְבֵּי פיצה getPizza();
}
אפליקציית הפיצה לדוגמה מאפשרת ללקוחות להזמין כל תוספות, כגון גבינה, פפרוני, בצל או שילובים שונים. לכן פיצה אחת שלקוח יזמין היא גבינה.
פּוּמְבֵּימעמדCheesePizzaBuilderמיישםבּוֹנֶה{
פְּרָטִי פיצה פיצה;
פּוּמְבֵּיCheesePizzaBuilder(){
זֶה.פיצה = חָדָשׁ פיצה();
}
@עקוף
פּוּמְבֵּיבָּטֵלליצור בצק פיצה(){
זֶה.pizza.setPizzaDough("בצק");
}
@עקוף
פּוּמְבֵּיבָּטֵלcreateTopping(){
זֶה.pizza.setTopping("גבינה");
}
@עקוף
פּוּמְבֵּי פיצה getPizza(){
לַחֲזוֹרזֶה.פיצה;
}
}
הכיתה CheesePizzaBuilder מיישמת את ממשק ה-Builder ומשתמשת בו כדי ליצור פיצת גבינה חדשה. זהו ייצוג אחד של אובייקט הפיצה. הוא גם עושה זאת באופן שאינו תלוי במעמד הפיצה.
כיתת CheesePizzaBuilder לא יודעת הרבה על כיתת פיצה, היא יודעת רק מה היא צריכה לדעת כדי להשלים את תפקידה. הוא יודע שלמחלקת פיצה יש תכונה של בצק ותוספת, והיא קובעת את המאפיינים הללו לשני ערכים ספציפיים שיהיו לכל פיצת גבינה. עכשיו בכל פעם שהאפליקציה קוראת לכיתה CheesePizzaBuilder היא תיצור פיצה חדשה עם תוספת גבינה.
כיתת הבמאי
כיתת הבמאי היא היבט מכריע בדפוס הבונה. המטרה היחידה של כיתת בוני בטון היא ליצור אובייקט ספציפי. זה משיג זאת על ידי יצירת חלקים שונים של אובייקט בנפרד.
עם זאת, כיתות הבטון של הבנאים אינן מודעות לאלגוריתם. אף אחת מכיתות הבנאים לא יודעת לבנות את הבצק לפני הוספת התוספת. זו הפונקציה של כיתת הבמאי.
פּוּמְבֵּימעמדמְנַהֵל{
פְּרָטִי Builder pizzaBuilder;
פּוּמְבֵּימְנַהֵל(Builder pizzaBuilder){
זֶה.pizzaBuilder = pizzaBuilder;
}
פּוּמְבֵּי פיצה getPizza(){
לַחֲזוֹרזֶה.pizzaBuilder.getPizza();
}
פּוּמְבֵּיבָּטֵללהכין פיצה(){
זֶה.pizzaBuilder.createPizzaDough();
זֶה.pizzaBuilder.createTopping();
}
}
כיתת Director משתמשת בממשק הבונה כדי להכין פיצות. זה שומר האלגוריתם.
היתרונות של שימוש בדפוס עיצוב ה-Builder
היתרון העיקרי בשימוש בדפוס העיצוב של הבנאי הוא תכונת המעטפת שלו. זהו היבט מכריע בהנדסת תוכנה, שכן הוא מסייע בפיתוח יישומים מאובטחים.
יתרון נוסף של דפוס עיצוב זה הוא גישת בניית האובייקטים שלו. זה מאפשר לך ליצור תהליכים מרובי שלבים, שבהם כל שלב הוא עצמאי, מה שמקל על ניפוי באגים.