聚光灯开发者日志(3)

10/2035 浏览综合
程序方面大部分工作已经完成,所以这个周末程序一直在玩[表情_捂脸哭]这篇日志就由程序来探讨一下技术方面的问题
组合优于继承?
面向对象编程中继承(is-a)是一种常用思想,指子类获取父类中的属性与方法,同时也可按需进行重写父类方法,比如,猫类中有eat()与meow()这两种方法,狗类中有eat()与bark()两类方法,此时就可以创建animal()类,包含一个eat()作为父类,让猫与狗继承此类
TapTap
同时还有一种方法组合(has-a),将这三种函数方法独立出来,在猫类与狗类中进行选择调用,同时也是最直观的方法
TapTap
对于完美继承不会发生变化的类可以使用继承的方法,此时倘若给animal添加一个run()方法,猫与狗类中进行实现,但是如果添加一个类,鱼类,鱼自然不包含run()方法,此时继承就会出现问题,当父类进行改动时,子类就会容易出现问题,灵活性较差。
TapTap
而对于组合模式时,可以在添加一个run()方法,在猫狗中实现,鱼类中不实现,虽然代码冗余增加了,但是可以更加灵活
TapTap
所以在开发中我更偏向于使用组合的方法,除非子类中符合完美继承,因为变化是完美设计的最大敌人,组合的模式更能应对这种变化的情况,当开发前期使用继承的方法,当到了后期出现了变化的话,继承就可能会出现大问题
7
2