鸭子类型
If it walks like a duck and quacks like a duck, then it's a duck
一个类,如果实现了鸭子的所有功能(接口),那么它就是鸭子,不必管它是外星人还是未来人还是超能力者.
它的关注点不再是继承关系或对象的类型,而是把焦点放在对象的行为上.
简单例子,如果我需要调用obj.speak(),那么不管这个obj到底是什么,之需要有这个方法就行.
既然它是一种弱化类型的多态方法,那么就会比较常见于Python等动态语言上,不过我们依旧可以在C++上利用模板元编程来实现——(会在C++章节详细说说)
用途
不依赖父类或者接口,所以实现插件就比较方便——在做单元测试的时候可以快速实现,比如测试A的时候,A依赖一个来自服务器的复杂运算,但是就可以使用鸭子类型给先暂时插入占位,保证A的逻辑等正确
同时,也可以避免“继承爆炸”——即继承太多父类(菱形继承的风险)或者太多接口
C#
class A : IMoveable, flyable, IRunable, ISwimable, I...
{
}之需要“实现方法”就好,少了一层类型的约束