
הטקסט המלא של הדקות הראשונות בהרצאה «הדגמה של Singleton - חלק 5» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
טוב, אז אנחנו רוצים לפתור את התרגיל שהקדמנו בשיעור הקודם. אז אמרנו שאנחנו רוצים ארבעה מחלקות שיהיו סינגלטון, החלון הוא טיפה אתגר, אז נניח לעת עתה לסינגלטוניות של החלון, אבל אנחנו רוצים אודיו ווידאו קלאסיים, שגם הם יהיו סינגלטון כמו ה-Communication, ואמרנו שאנחנו רוצים כפתורים,
כפתור לוג אאוט וכפתור סטארט אודיו ריקורדר וסטארט וידאו ריקורדר. אוקיי, אז בואו נעבור לקוד. יפה. אמרנו גם שאנחנו רוצים לנקות טיפה את השמות של המשתנים, אז בואו קומוניקיישן לגדול, לשיא גדול, לשנות את השם שלו לאינסטאנס.
אינסטאנס, נסיר את השיא ונעשה Alt Shift F10, Rename, Enter ונעשה F6. אין עם זה שום בעיה. ואינסטאנס, אלט שיפט F10, אנטר, אינסטאנס, ולזה נקרא אינסטאנס קטן.
בואו ניקח את זה, נשים את זה פה, ונקרא לזה אינסטאנס קטן, אלט שיפט F10, אנטר, F6, בילד עובר בהצלחה. אוקיי, וזה נראה בסדר, דבר ראשון. דבר שני, אמרנו, אנחנו רוצים את המחלקות הנוספות.
אז זה קלאס קומוניקיישן, בואו נוסיף קלאס, זה יהיה אודיו רקורדר, אודיו רקורדר, אנטר. ואנחנו רוצים במיין ווינדו, אנחנו רוצים כפתור, טוב אמרנו כפתור לוג אאוט, בואו נתחיל מכפתור לוג אאוט, אז בואו נשים עוד כפתור, אז F4, טאב, אמפרסנט, לוג אאוט, אנטר, נגלו למעלה, נשנה את השם שלו ללוג אאוט אנטר
ונוסיף כפתורים סטארט וידאו ריקורדר וסטארט אודיו ריקורדר, נשים אותם טיפה למטה, F4 זה הניים אז זה יהיה סטארט אודיו ריקורדר אנטר ומה שכתוב על הכפתור זה סטארט אודיו ריקורדר אנטר וכפתור עבור הוידאו, נגדיל את הכפתור הזה שיראו מה כתוב עליו וזה יהיה אותו גודל, F4, מה שכתוב עליו, אמפרסנט,
סטארט, וזה וידאו. וידאו, ריקורדר, אנטר, נגלום למעלה, בטון, סטארט, וידאו, ריקורדר, אנטר. ניגש ללוגאוט, דאבל קליק, נשמור הכל אז כן מאוד דומה לזה פשוט נשכפל את זה אולי בתור בהתחלה נכתוב את הקוד שיהיה יותר ברור אז אנחנו פונים לקומיוניקיישן נקודה אינסטנס נקודה אנחנו רוצים כמו לוגר ורוצים לוג אאוט אני אשנה פה
ללוג אאוט ועל שיפט F10 אנטר מייצר לי את הפונקציה F12 זו הפונקציה לוג אאוט אז גם פה פשוט נדפיס קונטרול סי, קונטרול וי, קונטרול איקס, וזה לוג אאוט, זה פשוט, פה נראה שזה עובד, F5, אז לוגין, בתור התחלה באמת נדבק, F11, F11, יופי מייצר, מצוין, F5, אמור היה להדפיס לנו לוגין אינבוקט, ולוג אאוט מגיע לברייק פוינט ולא מייצר, כי הוא כבר נוצר,
F11 ומדפיס F5 לוג אאוט בוא נראה את המסך יופי אז לוג אין אינבוגד לוג אאוט אינבוגד מצוין עכשיו בואו נעשה סטארט אודיו רקורדר דאבל קליק אז עכשיו אנחנו רוצים לגשת לאודיו רקורדר יצרנו רכיב אודיו רקורדר בואו נפנה אל אודיו רקורדר עכשיו לאודיו רקורדר כרגע אין שדה
ואנחנו סך הכל רוצים לממש את אותה ארכיטקטורה עבור האודיו רקורדר. אני רוצה להיות מסוגל לפנות אל האודיו רקורדר האחד והיחיד.
אז למעשה אני רוצה שיהיה לו שדה אינסטאנס. עכשיו מה שאני יכול לעשות זה לגשת, אולי בתור שלב ראשון נכתוב את הקוד ביחד, אבל בהמשך אפשר באמת לעשות קופי פייסט לבלוק של הקוד ולעשות שינויים קטנים.
אבל בשלב ראשון בואו נעשה את זה ידנית ביחד. אז מה שאנחנו רוצים זה שיהיה לנו שדה אינסטאנס יפה ושדה אינסטאנס טוב אנחנו רוצים שיהיה לו סטארט אודיו רקורדר אבל עדיין אנחנו לא יודעים מה זה השדה הזה אז אם אני אומר f12 אין לו דבר כזה אלט שיפט f10 הוא לא נותן לי לייצר כזה שדה אז מה שאני יכול אז בואו נלך ליצור את השדה בעצמנו אין ברירה אז f12 נלך לאודיו רקורדר
אנחנו רוצים שדה אינסטאנס, השדה הזה יהיה public והוא יהיה static והוא יהיה מסוג אודיו רקורדר ויקראו לו אינסטאנס וכאלה יהיו שניים ctrl cv אחד עם i קטנה זה יהיה השדה עצמו והשני יהיה התכונה ובתכונה אנחנו רק רוצים את get ובגט אנחנו בסוף רוצים לעשות ריטרן לאינסטאנס, אינסטאנס הקטן, אבל הוא עלול להיות נאל,
אז אם הוא נאל, אז אנחנו רוצים להקצות אותו לאודיו רקורדר חדש. מה שמבטיח לנו שכרגע אנחנו יכולים לעשות New Audio Recorder, אבל איך אנחנו מונעים יצירת אודיו רקורדרים מחוץ למחלקה?
אנחנו רוצים למזער את האפשרות שמשתמשי המחלקה, מתכנתים שהם משתמשים במחלקה, לא מפתחי המחלקה. מי שמפתח את המחלקה יכול לקרוא ל-New Audi Recorder כמה שהוא רוצה.
אז עדיין עלול להיות מצב שזה לא יהיה סינגלטון בזמן ריצה, אבל בסדר, זה... מצד אחד יש לנו גמישות שאפשר לייצר הרבה כאלה, ולכן יש גם את הסכנה שאנחנו עלולים לייצר הרבה כאלה מתוך המחלקה.
אבל אם אנחנו נראה בזמן ריצה שנוצרו לנו הרבה, אם נזהה שיש תקלה, אנחנו מיד נדע שזה חייב היה לנבוע מתוך המחלקה. וזה עיקרון שנקרא עיקרון הלוקאליות, עיקרון המקומיות, שהוא מאוד חזק.
זאת אומרת, אם אני מזהה תקלה כמו יצירה של הרבה אודיו רקורדרים, ואני יודע שהקונסטרקטור הוא פרייבט, אז אני יודע שרק מתוך המחלקה, או בהסתברות גבוהה, רק מתוך המחלקה יכולה הייתה להיווצר התקלה.
זאת אומרת, מישהו מתוך המחלקה יצר הרבה אודיו רקורדרים. אז זה מה שאני משיג בפרייבט קונסטרקטור. בואו באמת נעשה את הקונסטרקטור פרייבט, סיטור, ונגדיר אותו פרייבט.
F6, F8 אומר שיש שגיאות, F8 מביא אותי לשגיאה הבאה. טוב אז פה כתוב אינסטאנס כרגע אינסטאנס כבר קיים אבל גם אינסטאנס הקטן קיים F12 אז אינסטאנס הקיים אמור להיות פרייבט הוא לא אמור להיות זמין הוא מסוכן אנחנו לא רוצים לאפשר גישה אליו אם הוא פאבליק אז כל אחד מבחוץ יכול לשנות אותו קונטרול KD
נסדר קצת את הקוד קונטרול F6 קונטרול בוא נחזור לכאן יופי אז זה אינסטאנס מה אני יכול לעשות עם אינסטאנס טוב כרגע עם האודיו רקורדר אני לא יכול לעשות שום דבר בוא נוסיף לו סטארט אודיו רקורדר בואו ניקח את הקוד הזה את המילים האלו סטארט אודיו רקורדר ואלט שיפט F10 אנטר
F12 יופי בואו נשנה את זה לפאבליק אז זה סטארט אודיו רקורדר יפה F6 עובר בשלום מה אנחנו רוצים לעשות כאשר משתמש לוחץ על סטארט אודיו רקורדר זה משתמש לחץ על סטארט אודיו רקורדר מתוך החלון הראשי אנחנו אנחנו פונים לאודיו רקורדר לפונקציה סטארט אודיו רקורדר ומתוך הפונקציה סטארט אודיו רקורדר אנחנו אומרים
להדפיס אודיו רקורדר סטארטד ואז גם לפנות אל קומוניקיישן ולהגיד לו send audio packet אז בואו נעשה את זה. אז מתוך סטארט אודיו רקורדר אנחנו מדפיסים cw start audio recorder invoked ונוציא וגם אנחנו רוצים לפנות אל קומיוניקיישן תראו איזה יופי נקודה אינסטנס נקודה ואנחנו רוצים לשלוח אודיו פאקט וזה יהיה סנד סנד אודיו פאקט וניצור את הפונקציה על שיפט f10 enter f12 סנד אודיו פאקט ופשוט
נדפיס cw אודיו פאקט סנד או סנד אודיו פאקט אינבוקט גם טוב אינבוקט וקונטרול F5 ולוגין 5, F9, F5, אז לוגין אינבוקט, לוגאוט, F9, F5 ואת זה נקטין, יופי, אז כשאני עושה לוגין אז הוא אומר Communication, sit or invoke, לוגין אינבוקט, אם אני אעשה שוב לוגין אז הוא רק יגיד לוגין אינבוקט,
לוגאוט, לוגאוט, יופי, מצוין, סטארט אודיו רקורדר, אז אנחנו רואים אודיו רקורדר, או Invoked, Start Audio Recorder Invoked ו-Send Audio Packet Invoked.