Decorator Pattern
יש לכם HttpClient שעושה fetch רגיל. Product Manager מבקש Logging. Ops מבקשים Retry Logic על כשלונות. Security מבקשים Authentication Headers. כל אחד מהם בקשה סבירה. הבעיה: איך מוסיפים את שלושתם מבלי שה-HttpClient יהפוך ל-God Class עם 200 שורות, ומבלי שיצירת HttpClient שעושה Logging אבל לא Retry תדרוש Subclass נפרד?
ירושה לא מספיקה. עם 3 יכולות - צריך $2^3=8$ Subclasses לכסות כל שילוב. עם 5 יכולות - 32 Subclasses. זה Combinatorial Explosion, ו-Decorator Pattern הוא הפתרון.
הבעיה לא רק מספרית. ירושה אומרת שכל שילוב מוגדר בזמן Compilation. LoggingRetryHttpClient - ברגע שיצרתם אותו, הוא לנצח Logging+Retry. אי אפשר להוסיף Auth אחר כך בלי Subclass חדש. Decorator פותר גם את ה-Combinatorial Explosion וגם את בעיית ה-Runtime Composition - אפשר לבנות Stack שונה לכל Request לפי Context.