我在编一个游戏。在这场比赛中,我有三个阶段。在第一阶段,有一个静态的进球和一个静态射手在游戏中。在第二阶段,目标将移动。在第三种情况下,两者都在移动。
我想使用抽象工厂来创建同一个家族的对象。
我想知道下列哪种设计是正确的:
拥有2家工厂:

拥有3家工厂:

我只是不知道该根据我的问题,用同样数量的家庭在右边制造混凝土工厂吗?
例如,在这个场景中,我有两个对象系列(产品)。第一个家庭是枪,第二个是目标。但我有三个阶段,我前面已经解释过了。因为产品的种类而有两个工厂是对的,还是按阶段有3个家庭呢?
发布于 2014-12-13 10:29:15
老实说,我可能会采取完全不同的方法。我会建4个工厂,每个对象类型一个。然后,我将创建一个包含一个GunFactory实例和一个GoalFactory实例的新级别类,并创建3个级别实例(可能存储在列表中),每个实例都具有适当的工厂组合。
这有两个原因,一个是理论上的,一个是实践上的。在理论层面上,“造枪”和“造目标”的责任是否属于同一责任,这一点根本不清楚,所以单一的责任模式规定,我们应该避免有一个同时做到这两种责任的对象。另一方面,级别对象有一个明确的责任:“将初始化游戏级别所需的所有信息和行为集合在一起”。
第二个更实际的方面是,这使您可以更容易地添加新的级别,而不是原来的任何一个建议。假设您想添加第四个级别,再次使用不同的枪和目标组合;在第一个设计中,您必须更改现有的初始化代码来选择不同的工厂集,在第二个阶段,您必须为抽象工厂类创建一个新的子类,而根据我的建议,您只需在列表中添加一个新的级别实例,只需更改一行。(这也可以从理论上说是“当需要增加水平时,设计更符合开放/封闭原则”,但我更喜欢这里的实际重点)。
https://softwareengineering.stackexchange.com/questions/266300
复制相似问题