בהמשך לטיפים הקודמים,
נדבר הפעם על הDesign pattern ששמו Strategy.
הרעיון של הDesign pattern הוא מימוש של חלק ממחלקה באמצעות מחלקה אחרת.
הדבר מאפשר החלפת חלק מההתנהגות של המחלקה באמצעות הזרקה של מחלקה אחרת.
לדוגמה, נניח שיש לנו את הממשק הזה:
|
|
נוכל ליצור מימוש מוכוון Strategy שלו כך:
|
|
כאשר הממשק INumberAdder נראה כך:
|
|
כעת אנחנו יכולים לאפשר שינוי ההתנהגות של הCalculator ע"י מימושים שונים של NumberAdder, למשל:
|
|
או מימוש טיפה יותר טוב 😃
|
|
וכך נוכל להחליף את ההתנהגות של הפונקציה שלנו ע"י שינוי הAdder מבחוץ:
|
|
בסה"כ אנחנו רואים שאנחנו יכולים לשפר את המחלקה שלנו ע"י שיפור "האלגוריתם" הפנימי שלה.
הדבר שימושי במידה ויש לנו מחלקה שמשתמשת באלגוריתם ואנחנו רוצים לאפשר לשפר או לשנות את האלגוריתם מבחוץ. כמובן, לא בהכרח חייב להיות לנו אלגוריתם מתמטי, אלא יכול להיות מדובר גם ב"שירות", למשל שירות שמספק לנו אפשרות לשלוף מDatabase.
בנוסף, הדבר יכול להיות שימושי אם נוכל לקנפג את הStrategy בו אנחנו משתמשים מבחוץ – כך נוכל להחליף התנהגות של מחלקה מבלי לשנות קוד.
הדבר גם מאפשר Mocking בחלק מהמקרים.
אני מניח שכולנו השתמשנו בדברים כאלה, רק לא ידענו שקוראים לזה Strategy.
סופ"ש מלא אסטרטגיה טוב.