การเลือก pattern ที่เหมาะสม (หรือไม่เลือกเลย) สำหรับปัญหาต้องอาศัยการเข้าใจปัญหาอย่างลึกซึ้ง การรู้ patterns และข้อแลกเปลี่ยน (trade-offs) ของมัน และการใช้วิจารณญาณเพื่อชั่งน้ำหนักประโยชน์กับความซับซ้อน เป้าหมายคือการแก้ปัญหาให้ดี ไม่ใช่การใช้ patterns เพื่อตัวมันเอง
เริ่มที่ปัญหา ไม่ใช่ pattern
✓ UNDERSTAND THE PROBLEM first → what's the actual issue? (don't start by picking a pattern)
✓ Identify what you NEED → flexibility? decoupling? extensibility? simpler creation?
✓ Then ask: does a pattern address THIS problem well? (or is a simple solution better?)
→ problem-first, not pattern-first → avoid forcing patterns
จับคู่ patterns กับปัญหา
Recognize which patterns fit which problems:
→ need ONE instance? → Singleton (or DI/module — consider alternatives)
→ decouple object creation? → Factory; complex construction? → Builder
→ swappable algorithms / eliminate conditionals? → Strategy
→ notify many of changes? → Observer; add behavior by wrapping? → Decorator
→ incompatible interfaces? → Adapter; simplify a subsystem? → Facade
→ undo/queue actions? → Command; control access? → Proxy
→ know the patterns' INTENT (the problem each solves) to recognize the fit
