ראשי > strategy pattern > חלק ראשון
The Strategy

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

ידועה גם בתור:
Policy

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

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

לחצו להגדלה
לחץ להגדלה - strategy exapmle

אם אינכם זוכרים את הסימונים בדיאגרמה זה הזמן להתרענן. נניח שהמחלקה Composition אחראית לתחזוקה ועדכון של שבירת השורות בטקסט שמוצג בעורך כלשהו. האסטרטגיות לשבירת שורות אינן ממומשות במחלקה Composition. הן ממומשות בנפרד על ידי subclasses של המחלקה האבסטרקטית Compositor. ה subclass ים של Compositor מממשים אסטרטגיות שונות:
  • SimpleCompositor - מממש אסטרטגיה פשוטה שקובעת את נקודות שבירת השורות אחת אחת לפי הסדר.
  • TeXCompositor - מממש את אלגוריתם הTeX עבור מציאה של נקודות השבירה. אסטרטגיה זו מנסה לבצע אופטימיזציה בצורה גלובלית, כלומר פסקה שלמה בו זמנית.
  • ArrayCompositor - מממש אסטרטגיה שבוחרת שבירות כך שבכל שורה יש מספר קבוע של פריטים. זה שימושי למשל במקרים שנרצה לסדר אוסף של צלמיות (icons) בשורות.


למעלה







 
מה בעמוד:
 
המטרה
המוטיבציה
הפתרון