一个类要实现一个功能,这个功能可以是从子类继承,也可以是实现某个接口来实现多态,就是相同的子类或接口统一调用,实现多态调用。
编程中常用的是继承,继承是全继承,当一个类很复杂的时候,继承就会变得很繁琐,比如继承了一堆没用的子功能、继承的层次过深等等,这时候可以使用组合来进行最小化实现。
按接口实现这个功能,向外暴露的是这个接口,接口之外的功能外部不用也不能知道,这样避免传递一些大的对象让使用者难以理解。一个类可以同时实现多个接口。实现了一个接口,并不一定要在类内部具体实现,可以在类内部实例化一个具体的实现类,在接口方法中进行调用。虽然有些代码重复,但重复代码也不是太多。
有个人把一个类实现某个接口,在接口中调用其他实现该接口的类的方法称为委托,这个委托是按照现实生活中的意思称为委托,这里和delegate不是一回事,这种叫法会带来歧义,在编程中一个词在一个范围内有多个意思会增加复杂性,应尽量保持一个词在一个范围内一个意思,避免歧义。这里的委托就如饭店能做饭给顾客,实际做饭的是厨师,客户不用关心饭是谁做的,记得哪家好吃又实惠去哪家吃就行了,厨师可以进行培训升级或者替换,也可以是多个厨师进行组合一起做饭。