There’s been a fair bit of discussion of the Component model on these boards, most of it negative. Although I had a lot of initial enthusiasm for them early on, the more I worked with them the less that I had. Although there are many flavors of Component systems most involve a system where you have a GameEntity which has no functionality other than to add/remove components. All Entity behavior resides in Components which can be dynamically added/removed as the game runs.
My main issues are that this provides far, far more flexibility than I need (and that most hobby game devs need I suspect). This flexibility requires more complexity and makes things more difficult to reason about.
An approach I prefer is just have entity behavior within in entity specific classes (FighterJet, Missile, etc) and to use the Strategy Pattern for cases where I have related and/or shared functionality.
You are giving up some of the “dynamicity” of the E/C model (which I don’t need any how) while still getting the benefits of a favoring aggregation over inheritance while working with a simpler set of code over all.