7 דפוסי עיצוב התוכנה החשובים ביותר

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

מדוע דפוסי עיצוב?

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

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

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

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

בלי להתמודד יותר (בסדר החשיבות הכללי, מכל הפחות):

דפוסי העיצוב החשובים ביותר

  1. סינגלטון

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

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

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

2. שיטת מפעל

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

בדרך כלל, יצירת אובייקטים ב- Java מתרחשת כך:

SomeClass someClassObject = new SomeClass ();

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

3. אסטרטגיה

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

4. משקיף

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

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

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

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

5. בונה

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

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

6. מתאם

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

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

7. מדינה

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

רוצים להמשיך ללמוד?

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

הקורס מבוסס על הספר הפופולרי של כנופיית ארבע, אך מוצג בפורמט אינטראקטיבי וקל לעיכול. תוכלו להשתלט על 23 דפוסי העיצוב המפורסמים מהספר באופן אינטראקטיבי, ללמוד את היישומים הנכונים של 3 סוגי דפוסי העיצוב העיקריים (יצירתי, מבני והתנהגותי) ולמד לשלב דפוסי עיצוב אלה בפרויקטים משלך.

תבדוק את זה עכשיו.

פורסם במקור ב blog.educative.io ב- 7 בנובמבר 2018.