יצירת Java Builder לשיעור ב- IntelliJ

1. הקדמה

דפוס העיצוב של Builder הוא אחד מתבניות היצירה הנפוצות ביותר. זה עוזר לנו לבנות עצמים מורכבים.

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

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

2. הגדרה ראשונית

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

נתחיל עם הגדרת ה- סֵפֶר בכיתה שעבורה נפיק בונה:

ספר בכיתה ציבורית {כותרת מחרוזת פרטית; מחבר מחבר פרטי; פרטית LocalDate publishDate; פרטי int pageCount; // קונסטרוקטור (ים) סטנדרטיים, גטרים וקובעים}

3. שימוש בפונקציונליות המובנית של IntelliJ

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

בואו ניצור אחד:

ספר ציבורי (כותרת מחרוזת, מחבר מחבר, LocalDate publishDate, int pageCount) {this.title = title; this.author = מחבר; this.publishDate = publishDate; this.pageCount = pageCount; }

עכשיו, אנחנו מוכנים ליצור בונה. לכן, בואו נציב את הסמן על הבנאי שנוצר ונפתח את משנה את זה קופץ על ידי לחיצה Ctrl + Alt + Shift + T (במחשב האישי) ובחר החלף את הבנאי ב- Builder ארגון מחדש:

אנו יכולים להתאים עוד כמה מהאפשרויות עבור מחלקת הבנאי, כמו שמו וחבילת היעד שלו:

כתוצאה מכך, יצרנו את BookBuilder מעמד:

BookBuilder בכיתה ציבורית {כותרת מחרוזת פרטית; מחבר מחבר פרטי; פרטית LocalDate publishDate; פרטי int pageCount; Public BookBuilder setTitle (כותרת מחרוזת) {this.title = title; להחזיר את זה; } Public BookBuilder setAuthor (מחבר המחבר) {this.author = author; להחזיר את זה; } Public BookBuilder setPublishDate (LocalDate publishDate) {this.publishDate = publishDate; להחזיר את זה; } Public BookBuilder setPageCount (int pageCount) {this.pageCount = pageCount; להחזיר את זה; } יצירת ספר ספר ציבורי () {להחזיר ספר חדש (כותרת, מחבר, publishDate, pageCount); }}

3.1. קידומת סטרים מותאמים אישית

נהוג להשתמש ב- עם קידומת לשיטות קבע בשיעורי בנאי.

כדי לשנות את קידומת ברירת המחדל, עלינו לבחור את שנה את שם קידומת Setters סמל בפינה השמאלית העליונה של חלון האפשרויות:

3.2. בנאי פנימי סטטי

חלקנו עשויים להעדיף ליישם בונים כמעמדות פנימיים סטטיים כמתואר על ידי ג'ושוע בלוך ב- Java Effective.

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

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

ספר בכיתה ציבורית {כותרת מחרוזת פרטית; מחבר מחבר פרטי; פרטית LocalDate publishDate; פרטי int pageCount; Class static public Builder {} ספר פרטי (כותרת מחרוזת, מחבר מחבר, LocalDate publishDate, int pageCount) {this.title = title; this.author = מחבר; this.publishDate = publishDate; this.pageCount = pageCount; } // גטרים וקובעים סטנדרטיים}

יתר על כן, עלינו לבחור השתמש בקיים בחלון האפשרויות והצביע על הכיתה החדשה שנוצרה:

4. שימוש בתוסף InnerBuilder

בואו נראה עכשיו כיצד נוכל ליצור בניין עבור ה- סֵפֶר בכיתה באמצעות תוסף InnerBuilder.

לאחר שהתקנו את התוסף, נוכל לפתוח את ה- לִיצוֹר קופץ על ידי לחיצה Alt + הוספה (במחשב האישי) ובחירת ה- בּוֹנֶה… אוֹפְּצִיָה:

לחלופין, אנו יכולים להתקשר ישירות לתוסף InnerBuilder על ידי לחיצה Alt + Shift + B (במחשב האישי):

כפי שאנו רואים, ישנן כמה אפשרויות בהן אנו יכולים לבחור להתאים אישית את הבנאי שנוצר.

בואו נראה את הבנאי שנוצר כאשר כל האפשרויות אינן מסומנות:

ציבורי כיתת גמר סטטית ציבורית {כותרת מחרוזת פרטית; מחבר מחבר פרטי; פרטית LocalDate publishDate; פרטי int pageCount; Public Builder () {} public Builder public (String val) {title = val; להחזיר את זה; } מחבר בנאי ציבורי (Author val) {author = val; להחזיר את זה; } Public Builder publishDate (LocalDate val) {publishDate = val; להחזיר את זה; } public Builder pageCount (int val) {pageCount = val; להחזיר את זה; } לבנות ספר ציבורי () {להחזיר ספר חדש (זה); }}

תוסף InnerBuilder מיישם את הבונים כמחלקות פנימיות סטטיות כברירת מחדל.

5. שימוש בתוסף Builder Generator

לבסוף, בואו נראה איך עובד Builder Generator.

באופן דומה, לגבי InnerBuilder, אנו יכולים ללחוץ Alt + הוספה (במחשב האישי) ובחר בּוֹנֶה אפשרות או שימוש Alt + Shift + B קיצור.

כפי שאנו רואים, יש לנו שלוש אפשרויות לבחירה להתאמה אישית של ה- BookBuilder:

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

כיתת הגמר הציבורית BookBuilder {כותרת מחרוזת פרטית; מחבר מחבר פרטי; פרטית LocalDate publishDate; פרטי int pageCount; BookBuilder פרטי () {} ספר BookBuilder סטטי ציבורי () {להחזיר BookBuilder חדש (); } BookBuilder ציבורי עם כותרת (כותרת מחרוזת) {this.title = title; להחזיר את זה; } BookBuilder ציבורי withAuthor (מחבר מחבר) {this.author = author; להחזיר את זה; } BookBuilder ציבורי עםPublishDate (LocalDate publishDate) {this.publishDate = publishDate; להחזיר את זה; } BookBuilder ציבורי עםPageCount (int pageCount) {this.pageCount = pageCount; להחזיר את זה; } מבנה ספר ציבורי () {ספר ספר = ספר חדש (); book.setTitle (כותרת); book.setAuthor (מחבר); book.setPublishDate (publishDate); book.setPageCount (pageCount); ספר החזרה; }}

האפשרות הראשונה שמציע תוסף Builder Generator להתאמה אישית של מחלקת הבונים שנוצרה - בונה פנימי - זה די מסביר את עצמו.

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

5.1. 'אבל' אפשרות שיטה

אם נבחר באפשרות זו, התוסף יוסיף a אבל() שיטה ל BookBuilder מעמד:

BookBuilder ציבורי אבל () {להחזיר aBook (). withTitle (title) .withAuthor (author) .withPublishDate (publishDate) .withPageCount (pageCount); }

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

בואו נסתכל על דוגמה:

BookBuilder commonBuilder = BookBuilder.aBook (). WithAuthor (johnDoe) .withPageCount (123); ספר my_first_book = commonBuilder.but () .withPublishDate (LocalDate.of (2017, 12, 1)) .withTitle ("הספר הראשון שלי"). Build (); ספר my_second_book = commonBuilder.but () .withPublishDate (LocalDate.of (2018, 12, 1)) .withTitle ("הספר השני שלי"). Build (); ספר my_last_book = commonBuilder.but () .withPublishDate (LocalDate.of (2019, 12, 1)) .withTitle ("הספר האחרון שלי"). Build ();

5.2. השתמש באפשרות שדה יחידה

אם נבחר באפשרות זו, הבנאי שנוצר יחזיק התייחסות ליצירה סֵפֶר חפץ במקום כל מאפייני הספר:

כיתת גמר ציבורית BookBuilder {ספר ספרים פרטי; BookBuilder פרטי () {book = ספר חדש (); } ספר BookBuilder סטטי ציבורי () {להחזיר BookBuilder חדש (); } BookBuilder ציבורי עם כותרת (כותרת מחרוזת) {book.setTitle (כותרת); להחזיר את זה; } BookBuilder ציבורי withAuthor (מחבר מחבר) {book.setAuthor (מחבר); להחזיר את זה; } BookBuilder ציבורי עםPublishDate (LocalDate publishDate) {book.setPublishDate (publishDate); להחזיר את זה; } BookBuilder ציבורי עםPageCount (int pageCount) {book.setPageCount (pageCount); להחזיר את זה; } בניית ספר ציבורי () {ספר חוזר; }}

זו גישה שונה במקצת ליצירת כיתת בנאים שעשויה להיות שימושית במצבים מסוימים.

6. מסקנה

במדריך זה בדקנו דרכים שונות ליצור שיעורי בנייה ב- IntelliJ.

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