Favor composition over inheritance.
Master and Student…
Master: Grasshopper, tell me what you have learned of the Object-Oriented ways.
Student: Master, I have learned that the promise of the object-oriented way is reuse.
Master: Grasshopper, continue…
Student: Master, through inheritance all good things may be reused and so we come to drastically cut development time like we swiftly cut bamboo in the woods.
Master: Grasshopper, is more time spent on code before or after development is complete?
Student: The answer is after, Master. We always spend more time maintaining and changing software than on initial development.
Master: So Grasshopper, should effort go into reuse above maintainability and extensibility?
Student: Master, I believe that there is truth in this.
Master: I can see that you still have much to learn. I would like for you to go and meditate on inheritance further. As you’ve seen, inheritance has its problems, and there are other ways of achieving reuse.
This quote comes from Head First Design Patterns, I personally favor composition over inheritance.
The Strategy Pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.