Table of Contents
דפוס ה-oneton הוא דפוס עיצוב בסיסי בהנדסה תוכנה המגבילה את הכיתה לדוגמה אחת ומספק נקודת גישה גלובלית לדוגמה זו.תבנית זו היא בעלת ערך במיוחד ביישומים הנדסיים שבהם שמירה על מצב גלובלי עקבי ואמינה היא קריטית.אם ממשקי חומרה, הגדרות, הגדרות, או משאבים משותפים, דפוס ה-oneton מציע דרך מובנית לשלוט בגישה ולהבטיח קוהרנטיות נתונים על פני מערכות מורכבות.
מהו ה- Singleton Pattern?
דפוס יחידון שייך לדפוסי עיצוב הבריאה המאגדים על ידי האנג' של ארבעה בעבודתם ה ⁇ (FLT:0) תבניות עיצוב: יסודות של תוכנת עיצוב בלתי תלויה באובייקטיביים (Oracle-Oriented SoftwareigtureFLT:1 , מטרת הליבה היא להבטיח כי לכיתת יש רק מקרה אחד ולספק נקודת גישה גלובלית לאותה מקרה.זה מושגת בדרך כלל על ידי יצירת מבנה פרטי וחשיפת שיטה סטטית (F) אשר נקראה לעיתים קרובות על שם אחד (או על שם אחד).
התבנית מתייחסת למספר בעיות נפוצות בתוכנה הנדסית: רכיבים מרובים עשויים להיות צריכים לתאם באמצעות משאב משותף (כמו מאגר חיבור מסד נתונים או חיישן חומרה), ויצירת מקרים מרובים יכולים להוביל למצבים סותרים או משאבים מבוזבזים.תבנית ה-oneton מאומנת נקודה אחת של שליטה, אשר מפשטת את ה- debugging והיגיון לגבי המערכת ’ התנהגות קלאסית היא אובייקט המשמש שימוש בכל יישום, ללא כל אחד, עשוי ליצור יומני אחיד, כולל, עם כל אחד, כולל קובץ בודד, או עיבוד אחיד, או עיבוד אחיד, עם כל אחד, עם כל אחד, יכול ליצור כל אחד, כולל לוחמת, כולל לוחמת, כולל לוחמת, כולל לוחמת, כולל יומן, כולל יומן, כולל לוחמת, ובדיקה אחת, כולל יומן, כולל לוחמת, ובדיקה אחת, ובדיקה אחת, או עיבוד יחיד, עם כל אחד, עם כל אחד, עם כל אחד, עם כל אחד, עם כל אחד, עם לוחמת, כולל לוחמת, עם לוחמת, עם כל אחד, עם לוחמת, כולל יומן בודד, עם לוח זמנים, כולל לוח זמנים, כולל לוחמת, כולל לוח זמנים, כולל לוח זמנים, כולל לוח זמנים, כולל לוח זמנים, כולל לוח זמנים, כולל לוח זמנים, כולל לוח זמנים,
Singleton הוא לעתים קרובות מבולבל עם כיתות סטטיות, אבל יש הבדלים מרכזיים. a Singleton יכול ליישם ממשקים, להיות מורחב (עם טיפול), ולתמוך בדמיון עצלנים.שיעורים סטטיים, לעומת זאת, אין גמישות כזו והם בעצם רק מקומות שם עבור שיטות ונכסים סטטיים. Singletons גם לאפשר ניהול מחזור חיים מבוקר ו-#8212; את הדוגמה ניתן להרוס ולשחזר אם יש צורך, אשר אינו עם כיתות סטטיות פשוטות.
למה רווקות למדינה העולמית?
המדינה העולמית היא לעתים קרובות הכרחית ביישומים הנדסיים, אבל זה מגיע עם סיכונים: אם חלקים מרובים של המערכת מחזיקים עותקים משלהם של המדינה, אי-קונסיסטליות יכול להתעורר.לדוגמה, במערכת בקרה בזמן אמת שבו פרמטרים תצורה נקראים ממקור מרכזי, כל סטייה בין מודולים עלולה להוביל לפעולה בלתי יציבה או אפילו נזק גופני.תבנית הטון מספקת גישה ממושמעת למצב הגלובלי על ידי הבטחת לא משנה היכן או רכיב זהה, במקרה זה מקבל אותה מדינה.
זה רלוונטי במיוחד במערכות משובצות, אוטומציה תעשייתית ופלטפורמות סימולציה שבו חומרה ותוכנה חייבים לעבוד בסנכרון הדוק.שימוש בסינגלונים לניהול המדינה העולמית מפחית את העומס הקוגניטיבי על מפתחים & #8212; הם עושים ’ לא צריך לעבור אזכורים באמצעות שכבות מרובות של היישום. במקום זאת, כל מודול יכול לבקש את הדוגמה העולמית ולעבוד עם זה ישירות, כל עוד הממשק מוגדר היטב חוט בטוח.
עם זאת, זה & #8217; חשוב להבחין בין התבנית עצמה לבין השימוש לרעה של המדינה העולמית.תבנית הטון לא עושה באופן אוטומטי טוב מדינה גלובלית; זה רק מספק מנגנון מבוקר לגישה. כאשר נעשה שימוש באופן עסיסי, זה יכול למנוע את הכאוס של משתנים גלובליים לא מאומתים ועדיין מציע את הפשטות כי יישומים הנדסיים רבים דורשים.
היתרונות המפורטים של דפוס ה- Singleton ביישומים הנדסיים
מדינה גלובלית עקבית
היתרון המיידי ביותר של דפוס הטון הוא כי הוא מבטיח כל חלק של היישום רואה את אותו נתונים. בהקשר הנדסי, זה יכול להיות ההבדל בין מערכת כי הוא באופן אמין ואחד כי מתנהג ללא מרשם.חשב מערכת בקרת טיסה שבו נתונים מהירות האוויר קוראים מחיישנים מרובים.אם מודולים שונים ליצור מקרים נפרדים של הממשק, הם עשויים לקבל קריאה שונה במקצת עקב תזמון או דגימה של אותו מתוקף של אותו מקור בודד.
מצב גלובלי עקבי גם מפשט את הבדיקות.כאשר אתה יודע שיש בדיוק מקרה אחד ניהול המדינה, אתה יכול לכתוב בדיקות ⁇ סטיות שקבעו את המדינה לפני הפעלת תרחישים.זה הרבה יותר קל מאשר מעקב אשר מחזיק את “ ריאלי ו- #8221; נתונים לאחר סדרה של פעולות.ב צינורות שילוב מתמשך, מדינה חד-אדם יכול להיות איפוס בין ריצות, מתן תוצאות חוזרות.
גישה מבוקרת למשאבים משותפים
יישומים הנדסיים לעתים קרובות צריך לנהל משאבים נדירים או בלעדיים: ממשקי חומרה (GPIO pins, יציאות סידוריות, אוטובוסים I2C), חיבורי רשת, אסימוני רישוי, או מטפלות קבצים.ללא טון, שני חלקים של המערכת עשויים לנסות לגשת לאותו משאב בו זמנית, גרימת סכסוכים.הסינגלטון פועל כמו שומר הסף, אכיפת מדיניות גישה כגון הדרה הדדית, גזר, או הזמנה.
לדוגמה, יחידון ו-#8220;GPIO ” הכיתה עשויה לחשוף שיטות כמו FLT:1 ו-FLT:2; סידרה פנימית של גישה באמצעות mutex. זה מונע תנאים גזע ומבטיח כי החומרה הפיזית נשארת במצב ידוע.
זיכרון יעילות
בסביבה ממוקדת משאבים ו-#8212; כגון מיקרובקרים עם כמה קילובייט של RAM או מכשירים קטנים של IoT ו- #8212; יצירת עותקים מרובים של אובייקט כבד יכול במהירות להשמצה זיכרון. דפוס A Singleton מונע כי מעל פני השטח על ידי הבטחת רק מקרה אחד קיים.זה מועיל במיוחד עבור אובייקטים הנושאים כיפים גדולים או לשמור על כאבי ראש.
אפילו במערכות יותר מסוגלות, יעילות הזיכרון חשובה מבחינת ביצועי ה-Cache. כאשר מקרים רבים קיימים, הם תופסים אזורי זיכרון שונים, שעלולים לגרום להפרעות מטמון יותר. מקרה אחד המשמש בכל יישום משפר את איכות הסביבה ויכול להוביל לביצועים טובים יותר, במיוחד בסימולציות הנדסיות של נתונים.
בסיס קוד מבוזר
אחד היתרונות הפחות ברורים של דפוס הטון הוא ההשפעה שלו על קוד קריאות ותחזוקתיות.מפתחים לא צריכים לעבור התייחסות למדינה העולמית באמצעות מבנים, שיטות, או מיכלי הזרקת התלות במקום, הם יכולים לקרוא (FLT 3: או FLT:4 ישירות היכן שנדרש.
בפרויקטים הנדסיים גדולים עם מאות שיעורים, הפשטות הזו אינה טריוויאלית.בכל פעם תכונה חדשה דורשת גישה למשאב משותף, המפתח חייב לשנות את ממשקי כיתות ביניים רבות רק כדי ליישר את ההתייחסות דרך.על ידי שימוש בסינגלטון, ההפיכה היא ישירה ופירושית.הצד התחתון הוא כי זה יכול להוביל לתלויים נסתרים, ולכן אדריכלים מודרניים רבים תלויים ליציבות לצד הזרקתות, כמו למשל, עם זאת, לעתים קרובות, כמו שעון הנדסי יחיד, או חלקית, עם זאת, הוא אחד, הוא אחד, הוא אחד, הוא כי הוא כי הוא כי הוא כי זה הוא לעתים קרובות אחד, עם זאת, הוא אחד, עם זאת, הוא כי הוא כי זה הוא אחד של זמן רב מאוד קשה מאוד קשה מאוד קשה מאוד, עם זאת, עם זאת, עם זאת, עם זאת, עם זאת, עם זאת, כמו לוח זמנים חד-זמנית של זמן רב של זמן רב של זמן רב של זמן רב של זמן רב, הוא כי זה יכול להוביל את המשטח של זמן רב, הוא כי זה יכול להוביל את הפחתת זמן רב של זמן רב של זמן רב של זמן רב של זמן רב של זמן רב של זמן רב של זמן רב של זמן רב של זמן רב של זמן רב של זמן רב של זמן רב של זמן רב
Lazy Firstization and Lifecycle Control
יישום Singleton בדרך כלל תומך בדמיון עצלן: המקרה נוצר רק כאשר FPLT:5 מכונים קודם לכן, זה יכול לשפר את ביצועי הסטארט-אפ, במיוחד אם הטון מעטוף רצף של חומרה יקר.לדוגמה, נהג מקלט GPS עשוי לבצע התחלה קרה שלוקחת כמה שניות.עם עצלות עצלות, עיכוב זה מתרחש רק כאשר היישום הראשון מבקש נתונים GPS, נותן את שאר המערכת להתחיל להתכונן.
בקרת מחזור החיים היא יתרון נוסף. A Singleton יכול לספק שיטות כדי לאפס או להחיות את המקרה & #8212; שימוש בתרחישים של איפוס המערכת או כאשר להתחבר לחומרה לאחר תקלה. בעוד כמה purists לטעון כי אחדטון צריך להישאר בחיים עבור היישום & #8217; חיים שלמים, דפוס יכול להיות מורחב כדי לאפשר יצירה מבוקרת.
חסרונות פוטנציאליים ומייגים
דפוס הטון אינו ללא ביקורת.זה כבר מסומן כ- “ המשתנה הגלובלי במסווה & #8221; והוא לעתים קרובות בשימוש יתר, המוביל קוד משותף חזק שקשה לבדוק ולשמור.ביישומים הנדסיים, עם זאת, חסרונות אלה ניתן לצמצם עם עיצוב זהיר.
אחד הדאגה העיקרית הוא מבחן. Singletons להציג את המדינה הגלובלית, אשר יכול לעשות בדיקות יחידה קשה כי בדיקות עלולות להפריע אחד לשני אם המדינה אינה איפוס כראוי.הפתרון הוא לתכנן רחפנים שניתן לבדוק באמצעות ממשקים.לדוגמה, להגדיר ממשק כפל 7 ושיש לו את ה- יחיד הנדסה ליישם אותו.בבדיקות, אתה יכול להחליף את ה-oneton ’ פנימי עם יישום או לעג, אם אתה יכול לספק בדיקה מעשית של #21.
עוד חסרונות מוסתרים: משום שכל קוד יכול לקרוא ל-FLT:8, מעקב אחר החלקים של המערכת תלויים בסינגלטון הופך קשה.בקודים גדולים, זה יכול להוביל להפיכה בלתי צפויה ולפרק כאשר הטון משתנה. Mitigations כוללים שימוש במיכלי הזרקת תלות שלנהל את ה-Sonetons במפורש, או מגבילים גישה רק למודולים מסוימים (לדוגמה, על ידי הצבת חבילת בקרה אחת וחבילת היבואה).
סוגיות קונפליקטיביות הן גם סיכון אם הטון אינו מיושם בעיות מנעולים או שחיתות במהלך ההתחלתיזציה.הפתרון הסטנדרטי הוא להשתמש במנגנון ראשוני של חוטים מרובים עשוי לקרוא FLT:9 בו זמנית, המוביל לבעיות מנעולים כפולות או שחיתות במהלך ההתחלתיזציה.הפתרון הסטנדרטי הוא להשתמש במנגנון ראשוני מאובטח חוט, כגון FLT:10 ב C, ++FLT:11FLT:11 ב- Java, או חסימת היסוד של מערכת ההפעלה (C).
דוגמאות אמיתיות בעולם בהנדסה
מערכות Embedded Systems: Sensor Fusion Manager
ברכב אוטונומי, חיישנים מרובים (lidar, מכ"ם, מצלמות) מייצרים נתונים שחייב להיות מלוכדים במודל מאוחד של הסביבה. A Singleton “ SensorFusionManager ” אחראי על תיאום קוראי חיישן, ניהול חותמות זמן, ופרסום המדינה הממוזגת למערכות תת-מערכת אחרות כמו תכנון ובקרה, כי כל הגישה זהה, הם מקבלים גם את ה-RAM של אבטחה לא בטוחה, אשר יכול להיות מסוגל להבטיח רק על ידי הפעלתושמת אבטחה אחת, אשר מופעלת, אשר יכולה להיות מופעלת רק על ידי הפעלתושמת, אשר יכולה להבטיח רק על ידי ה- RAM אחד, למנוע את ה-ההההת רק על ידי הפעלתושמת אבטחה אחת, למנוע את ה- RAM בודדת, אשר מופעלת עם מחסנים של מערכת-ידי מערכת-ידי מערכת-ידי מערכת-ידי שימושיתים, אשר מופעלת, אשר מופעלת, אשר מופעלת, אשר מופעלת, אשר מופעלת, אשר מופעלת, אשר מופעלת, רק על ידי שימוש בתאים קריטי, אשר מופעלת, אשר מופעלת, רק על ידי שימוש בתאים קריטי, אשר מופעלת, אשר מופעלת, רק על ידי שימוש בתאים יחיד,
בקרה תעשייתית: PLC Configuration
בקרים לוגיים (PLCs) באוטומציה במפעל לעתים קרובות להפעיל שירות תצורה כי לטעון פרמטר קובע מסד נתונים מרכזי. a Singleton “ Configurator & #8221; מספק כל שליטה בתנועה, חזון, רכיב HMI עם אותה הגדרות. כאשר מתכון חדש של מוצר מוזנח, ה-oneton מעדכן את המדינה הפנימית שלה ולאפיטורים רשומים צופה זה עיצובים למנוע את התצורה אחת של שימושים חדשים של המוצר, בעוד שעדיין יכול להיות מנקה מחדש את הגרסאות של הגרסאות של הגרסאות של הגרסאות של המוצר החדש, כאשר הוא גם כן, כאשר הוא יכול להיות מוכפליים, כאשר מתכון חדש של הגרסאות של הגרסאות של הגרסאות של הגרסאות של הגרסאות של הגרסאות של המכשיר החדש של המכשיר החדש של המכשיר, כאשר הוא יכול להיות מוכפל את הגרסאות של המכשיר, כאשר הוא יכול להיות מאוחר יותר של המכשיר החדש של המכשיר החדש של המכשיר החדש של המכשיר, כאשר הוא גם כן, כאשר הוא הגרסאות של המכשיר החדש של המכשיר החדש של המכשיר החדש של המכשיר החדש של המכשיר, כאשר הוא יכול להיות מופחת, כאשר הוא יכול להיות מופחת, כאשר מתכון חדש של המכשיר, כאשר מתכון חדש של המכשיר, כאשר הוא מוריד את הגרסאות של המכשיר החדש של המכשיר החדש של המכשיר
סימולציה גבוהה: זמן סינכרוניזציה
בסביבות סימולציה רב-פיזיות, פותרים שונים (הוראה, נוזל, תרמי) צריכים לקדם זמן במנעל. a Singleton “ GlobalClock ” שומר על זמן הסימולציה הנוכחי, גודל שלב, ו-Synchronization מחסומים.כל אחד ממיסים לאחזר את אותו מקרה ומשתמש בו כדי לקבוע מתי להחליף נתונים בגבול.
דוגמאות אלה מראות כי תבנית הטון אינה רק מושג תיאורטי אלא כלי מעשי שהמהנדסים מסתמכים על יום יומי.שימושיה במערכות ייצור ממרחב לרכב הרובוטיקה מעידה על יעילותו כאשר הוא מיושם באמצעות משמעת.לקריאה נוספת, ראו את התיאור הקלאסי ב-FLT:0Wikipedia Singleton PatternFLT:1 ואת הניתוח המקיף ב-LT:2OODdesigns:2, תבנית 1D:
המונחים
המונחים: Safety
ביישומים הנדסיים רבים, ה- Singleton ’s (FLT) 12 שיטה חייבת להיות חסימת חוט-בטוחה.הגישה הבטוחה ביותר היא להחדיר את הטון ברמת שפה: ב- C++11 ואילך, המשתנים המקומיים הסטטיים מובטחים להיות ראשוניים רק פעם אחת באופן מאובטח חוט.
המונחים: mitization
אם שיעור הטון הוא סדרתי (למשל, באמצעות Java ’ ממשק FLT:15), deserialization יכול ליצור מקרה שני אלא אם כן מטופלים בקפידה. OverrideFLT:16 ב Java כדי להחזיר את הדוגמה הקיימת לליטרון (בשפות כמו C#, ליישם את ממשק FLT:17 ולהחזיר את המקרה הקיים במהלך deserialization.
בדיקות וזריקת תלות
כדי להפוך את ה-Sonetons לבחינת, שקול להשתמש בהסתה של מיכל הבקרה שמנהל את מחזור החיים של ה-oneton. חלק מהמסגרות המודרניות מאפשרות לרשום שיעור כ-oneton מבלי לדרוש את התבנית עצמה (למשל, אביב ו-#8217;sFLT:18) גישה זו מציעה את היתרונות של מקרה אחד ללא החסרונות של שיטה סטטית גלובלית.
public class ConfigManager {
private static volatile ConfigManager instance;
static void setInstance(ConfigManager mock) { instance = mock; }
// ...
}
זה מאפשר בדיקות להזריק לעג או עוקץ, לאמת התנהגות מבלי להסתמך על המדינה העולמית האמיתית.זכור לאפס את המקרה בין בדיקות כדי להימנע מהתערבות.
מסקנה
דפוס יחיד של טוטון נשאר כלי רב עוצמה בתיבת כלי ההנדסת תוכנה לניהול המדינה הגלובלית.היכולת שלו לאכוף נקודת גישה אחת, זיכרון קונסול, לפשט קוד, ולתמוך בדמיון עצלן ישירות להתמודד עם אתגרים רבים מול מערכות מורכבות, רגישות משאבים ומציאותיות: רוברט פולוס 1D2 אינו נושא סיכונים של הפיכה הדוקה וצמצום יכולת הבדיקה, אלה יכולים להיות מנוהלים באמצעות יישום קפדני, עיצוב, ושימוש בתצורה של 122 של שימוש אמיתי, כאשר הוא מספק ממשק יחיד של שימוש ב- 2, כולל ממשק יחיד, לדוגמה, לדוגמה, כולל ממשק יחיד של אבטחה, כולל ממשק יחיד של אבטחה, כולל ממשק ו- 2, כולל ממשק ו- 2, כולל: 2, כולל ממשק יחיד של אבטחה, כולל: 2, כולל: 2, כולל ממשק יחיד של אבטחה, 2, 2, 2, 2, 2.82, 2.