I know that generally the design patterns promote programming to an interface not an implementation - and this provides more loose coupling, and helps keep inheritance trees down. My personal opinion is that component based programming is really nice...