A Strategy against Policy and a Policy against Strategy
When I first discovered the Strategy pattern, I was amazed of the seemingly endless possibilities it offered to me and my programs. I could better encapsulate my models' behaviour and even exchange this behaviour on the fly. But the strategy could also be used to to provide traits and payload to the containing object - data that was declared in a superclass. Life was fine. class MyMonsterAI { float const see_radius_; virtual void attack () = 0; /* .. */ }; class ElveAI { ElveAI() : see_radius_(150.0f) {} /* ... */ }; class CycloneAI { CycloneAI() : see_radius_(50.0f) {} /* ... */ }; class