公司新来一个小伙,设计类的时候喜欢这么搞,例如要实现一个串口通讯类,他会把基类做的很复杂,然后靠重载某些函数来实现不同的协议,虽然我一直觉得很别扭,但是也没有找出合适的理由来说服他。
今天下午偶然讨论起来,我突然想起一个类比,我举了一个猫和狗的类比。例如说我们要实现一个猫类,一个狗类,小伙的方法是先实现一个狗,然后让猫继承自狗,然后把所有猫和狗不同的行为进行重载,实现出一个猫来。而一般做法是,先实现一个动物,然后实现猫和狗,总共需要3个类。
为什么小伙这种方法有问题呢,是因为你如果让猫继承自狗,这样实现狗的类时候,就会带很重的狗的味道,你把狗改成猫,虽然看起来像猫了,但是一般你还是闻得出来一些狗的味道。更坏的情况是,如果某一天,因为某种需求,狗添加了一些的特征,而猫没有去重载,就会让猫里面出现狗的特征。而实现三个类这种设计,这猫里面最多会没有这个新特征,而不会出现狗的特征。而且,实现动物的时候,也不会考虑狗的一些特质,这样,猫里面也就不会有狗的味道。这是很重要的。