多用组合少用继承中,接口继承算不算一种组合?
关注者
106被浏览
31,793登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏
所有问题抛开具体的应用场景都是没法准确回答的。
拿我熟悉的游戏服务器领域来说,以前用得很多的模式是:把游戏中一切事物抽象为实体(基类),从实体继承下来的有场景,角色,掉落物等等;从角色继承下来的有怪物,玩家,NPC等等,由此形成一个继承树。是不是觉得很自然?
但现在慢慢不这么做了,因为通过继承很难把功能很好的切分,比如怪物有技能,玩家也有技能;怪物有AI,NPC也有AI;如果仍然使用继承的方式,要么角色类包含所有这些函数接口,然后子类具体实现;要么再分子类,比如带AI的角色,带技能的角色,然后再从这些子类继承出怪物。。。,最终你会发现整个继承树很深很复杂。
现在的做法是组件化:
- 一切游戏对象仍然叫实体,但它已没有具体的逻辑,它只负责管理组件。
- 每种组件实现具体的功能,比如技能组件,AI组件,序列化组件。。。
- 将不同的组件集成到不同的实体上,就形成不同的游戏对象。比如怪物实体,它有技能组件,有AI组件,有位置组件。玩家实体有技能组件,有序列化组件,有与客户端通讯的网络组件。。
通过组件化,服务器构架的灵活性大大提高了,你说这算不算一种组合的优点呢?
上面是多用组合少用继承的回答,另一个是:接口继承算不算一种组合?
不算,接口继承这个听着有点怪怪的,叫接口实现比较好吧?指明实现该接口的类需要实现的函数集,算是一种契约吧。