这是我关于Stack Overflow的第一个问题,所以请原谅我在问题中的任何不良做法(尽管我很感激反馈让我更好。)
我目前正在开发一个个人项目:一个具有最少图形的2D策略游戏。现在我已经完成了一个 very 准系统应用程序,我决定开始实现单元测试(我正在使用JUnit),我很快就意识到我的当前设计会有多痛苦。
考虑我当前设计中的几个类:Ship,ShipWeapon,ShipProvider和ShipWeaponProvider。船舶包含可以在其他船舶上发射的ShipWeapons列表。 ShipWeapon是定义某些武器特征(即损坏,准确性等)的对象.ShipProvider和ShipWeaponProvider对象用于从文件加载Ship / Weapon定义,以便稍后可以实例化(即shipProvider.getShip(“dummyShip”)返回新定义文件中定义的“dummyShip”类型的船舶。)
当我开始尝试编写JUnit测试时,我很快意识到我已经深入了解了一个受伤的世界。船舶取决于船舶武器;要测试船舶,您需要ShipWeapon,ShipProvider,甚至是WeaponProvider。为了测试ShipWeapon的射击方法,你需要两艘船:一个来源(发射射击的船)和一个射击目标。对这个问题的研究表明我有一个紧耦合问题;然而,我找不到的是我如何松散地结合这一组特定的课程。我该怎么做呢?
答案 0 :(得分:0)
谈到解雇,我会说这是访客模式(https://en.wikipedia.org/wiki/Visitor_pattern)的情况,其中ShipWeapon
是访问者,Ship
是接受实体。
另外,对于创建Ships
的更简单方法,我建议使用工厂或抽象工厂模式(https://en.wikipedia.org/wiki/Abstract_factory_pattern)。