מבוא לתבניות עיצוב

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

תצלום: Singleton Pattern inפרט

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

דמויות מקוריות

  • (ב) ,0) , למשל, מבטיח: FLT:1, המארגן הפרטי מונע ניתוק חיצוני.
  • גישה גלובלית: ההרחבה 1 (FLT:1) המופע נגיש מכל מקום ביישום, לעתים קרובות באמצעות משתנה סטטי ציבורי או שיטה.
  • (ב) ויקרא י"א: ויקרא י"ד): "התחילה" (ב) "התחילה" (ב) או "התחילה" (הראשונה)

כאשר Singleton הוא ropriate

  • (FLT:0) משאבי שיתוף אשר חייבים להיות מתואמת:FIRLT:1 מנהלים, בריכות חוט, בריכות חיבור, שירותי אחסון, ונהגי ממשק חומרה דורשים לעתים קרובות בדיוק בקר אחד.
  • (FLT:0 Global state that should be dividedd:03FLT:1) מנהלי Cache, מערכת קבצים מופשטת שכבות, או מנהלי חלונות במסגרות GUI.
  • (ב) ⁇ :0) פריטים רבי-הסבר: אובייקטים יקרי ערך ליצירת ושימוש חוזר בכל המערכת, מדוגמה אחת.

המונחים

בטיחות היא הנפילה הנפוצה ביותר.יישום תמים הבודקים עבור ההרחבה 1 (FLT:1), ולאחר מכן יוצר את המופע יכול לייצר מקרים רבים בסביבות מרובות-הנקראות. Solutions כוללים מנעול כפול עם FLT:2, מעמד פנימי סטטי (ביל Pugh Singleton), או aum-based Singleton ב Java.In, Python-Safeization ראשוני באמצעות LTF:3 הוא תקן בין העצלן לבין בחירה ראשונית מובטחת אם הוא תלוי אם הוא בטוח על ידי יחידן הוא בטוח על ידי יחידן הוא תלוי אם הוא מתאים לבודדה.

ביקורת ומלכודות

סינגלים נחשבים לעתים קרובות אנטי-פטרונים כי הם מציגים מדינה גלובלית, אשר עושה את היחידה בדיקות קשה - עדות הופכת להיות תלויה סדר וקשה לבודד.הם גם להסתיר תלות; מחלקה שמכנה FLT:4 ישירות הוא משותף הדוק למחלקה הבטונית של הטון, אלא אם כן מומלץ להשתמש בהזרקת תלות כדי לספק את הטון משותף, המאפשר החלפת עם לעג במבחנים, בנוסף למיקרו-שירות אחד (למשל, לא דורש הזרקתות) באופן קבוע.

שיטת המפעל: Pattern inפרט

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

דמויות מקוריות

  • (ב) לוגיקה הבריאה: לוגיקה: לוגיקה של יצירת: FIRLT:1) קוד הלקוח אינו מכיר את המעמד קונקרטי; הוא פועל באמצעות סוג מוצר מופשט.
  • ניתן להוסיף סוגים חדשים של מוצרים חדשים על ידי יצירת מפעלים קונקרטיים חדשים ללא שינוי קוד הלקוחות הקיים.
  • (ב) ויקרא י"ד: ויקרא י"ד): "המעמד המדויק של ה' ל''' נקבע במשרה מלאה, בהתבסס על דבקות, תצורה או הקשר.

כאשר שיטת המפעל היא נספח

  • (FLT:0)Families of Related Object:FLT:1 כאשר מערכת צריכה לעבוד עם מספר וריאציות של מוצרים שחולקים ממשק משותף - למשל, נהגים שונים של מסד נתונים, פורמטי יצוא מסמכים או ערכות נושא UI.
  • (FLT:0) קוד הלקוחות של יישום קונקרטי:03FLT) 1 הלקוח קורא שיטת המפעל ומקבל אובייקט תואם לממשק מופשט.שינויים בשיעורים קונקרטיים אינם משפיעים על הלקוח.
  • (FLT:0) יצירה מונחת על ידי קונפיגורציה: FIRLT:1) היישום יכול להחליט בסטארט-אפ שבו מפעל קונקרטי לשימוש על בסיס קובץ תצורה, משתנה סביבה, או מצב זמני ריצה.

המונחים

שיטת מפעל טיפוסית משתמשת בכיתה מופשטת (FLT:5) המכריזה על שיטת המפעל (לעתים מופשטת) יוצרי קונקרט מעל השיטה הזאת כדי לזרז מוצרים ספציפיים.בשפות ללא ירושה (למשל, JavaScript), המפעל יכול להיות פונקציה או סגירה.התבנית פועלת היטב עם מיכלי הזרקת תלות שיכולים להחליף את ה-GValf:0staticFite Factory (ג'אווה) היא לא אותה תבנית 6.

דוגמה אמיתית לעולם: מסמך המרתר

(הופנה מהדף ההרחבה) ,[[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]], [[1924]]]]]]]]]]]], [[1924]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

שיטת Singleton vs. Factory Method

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

Aspect Singleton Factory Method
Primary goal Ensure a single instance Encapsulate object creation
Instance count Exactly one Many instances, but created through a factory
Control over class selection Not relevant (always same class) Subclasses or runtime logic choose the concrete class
Impact on maintainability Can increase coupling (global access) Reduces coupling (client depends on abstraction)
Testability Often problematic (global state) Good, as factories can be mocked
Extensibility Limited (hard to subclass a singleton) High (new products via new factories)

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

כאשר הם מתאבלים (ומתי להשתמש גם)

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

שיקולים מעשיים עבור יישומים מודרניים

בדיקות וזריקת תלות

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

מערכות מבוזרות ודיסטריוט

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

שילוב של תבניות לפתרונות אמיתיים

מערכות ייצור רבות משלבות את הדפוסים האלה בתבונה.לדוגמה, AFLT:0 (Singleton Connection PoolsFLT:1) עשוי להשתמש בשיטת מפעל כדי ליצור סוגים שונים של חיבורים (למשל, לקריאה בלבד לעומת קריאת טקסט) ה- Singleton מבטיח בריכה אחת ליישום, בעוד שיטת המפעל מטפלת ביצירת חפצים.

טעויות נפוצות להימנע

  • (FLT:0) השימוש ב- Singleton כאשר מפעל היה מספיק:03FLT:1 אם אתה רק רוצה מקרה אחד של שיעור מסיבות ביצועים, הזרקת התלות עם קוטון הוא נקי יותר מאשר גישה גלובלית.
  • (ב) שיטת המפעל כאשר יצירת האובייקט היא טריוויאלית וקבועה: FLT:1 אם הסוג האובייקט לעולם לא משתנה ואין לו תת-מעמדות, בונה פשוט ברור יותר.
  • (FLT:0) הפיכה בין בתי-חרושת ומשפחות מוצר: אנדרט 1:1 להימנע מקביעת תצורה או לוגיקה עסקית בתוך שיטת המפעל שאמורה להיות במקום אחר.
  • (בסביבות השרתים:0) השגת בטיחות חוט בסינגלונים: אנדרל 1 (Irph 1) בסביבות השרת, סינגלטון לא-קורא-בטוח יכול לייצר מדינה מושחתת תחת עומס.

מסקנה

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

(ב) ראו את דפוסי ה-GoF הראשונים ב-FLT:0.GuruveofLT:1 ו-FLT:2Factory Methods FLT: 3.10.10.17.GuruREFLT:1 ו-FLT:5 כאלטרנטיבה ל- Singleton, ואת המאמר על שיטת ה-FLT:6Ftory Methods עבור יישום שפה ספציפית.