学完了oop面向对象的23种设计模式,后开始准备学习ecs架构,结果发现ecs是与oop属于并列关系,意思就是23种设计模式并不能完全服务于ecs。又问下豆包,设计模式只能是20%服务于ecs,心态有点砸。都不知道游戏第一步做什么,是oop还是ecs。或者是ecs与oop要一起用,完全没思路。
2条回答 默认 最新
关注让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek
如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞
- 关键点分析:
- 提问者在学习完面向对象的23种设计模式后准备学习ECS架构,发现ECS与OOP是并列关系,认为23种设计模式不能完全服务于ECS,甚至觉得只有20%能服务于ECS,想了解相关原因及情况。 - 解决方案:
- ECS与OOP的关系:- ECS(Entity - Component - System)架构是一种不同于传统面向对象编程(OOP)的架构模式。OOP主要围绕对象的继承、多态、封装等特性构建软件系统。而ECS将数据(组件)和行为(系统)分离,通过实体来组合不同的组件。
- 例如在OOP中,一个角色类可能包含移动、攻击等方法和相关属性。在ECS中,有移动组件、攻击组件等,实体通过组合这些组件来实现类似功能。
- 设计模式与ECS的适配情况:
- 虽然ECS与OOP是不同架构,但并非所有设计模式都完全不适用于ECS。一些设计模式的理念在ECS中仍有价值。
- 比如观察者模式,在OOP中用于对象间的一对多依赖关系,在ECS中可以用于系统对组件状态变化的监听。例如,当一个角色的位置组件(属于组件)发生变化时,相关的渲染系统(属于系统)可以通过观察者模式得到通知并更新画面。
- 工厂模式在ECS中也有应用场景。可以通过工厂来创建实体以及初始化其包含的组件。例如:
public class EntityFactory { public Entity CreateEntity() { Entity entity = new Entity(); entity.AddComponent(new PositionComponent()); entity.AddComponent(new VelocityComponent()); return entity; } }- 但确实有些设计模式在ECS中不太适用,因为ECS关注的是数据和行为的分离与组合方式,与OOP的对象层次结构和行为封装方式不同。例如装饰器模式,在OOP中用于动态地给对象添加职责,在ECS中由于组件和系统的架构特点,这种通过继承装饰对象的方式就不太容易直接应用。- 不同方案优缺点:
- 优点:- 对于观察者模式和工厂模式等在ECS中的应用,优点是可以利用设计模式的成熟理念来优化ECS架构中的部分功能,提高代码的可维护性和可扩展性。例如观察者模式能清晰地分离组件状态变化的通知和处理逻辑,工厂模式可以方便地管理实体和组件的创建。
- 缺点:
- 强行将一些不适用的设计模式应用于ECS可能会导致代码结构混乱。比如装饰器模式,如果硬套在ECS上,可能会破坏ECS原本的数据和行为分离的简洁性,增加代码理解和维护的难度。
- 总结:
- ECS与OOP是不同的架构模式,23种设计模式不能完全照搬应用于ECS,但部分设计模式如观察者模式、工厂模式等在ECS中有一定的适配和应用价值,可以帮助优化ECS架构中的相关功能,而对于一些不适用的设计模式则不应强行应用,以免影响代码质量和架构的合理性。
希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。
解决 无用评论 打赏 举报- 关键点分析: