首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在我的问题中,应该按照不同的阶段,在相同的对象家庭中制造混凝土工厂吗?

在我的问题中,应该按照不同的阶段,在相同的对象家庭中制造混凝土工厂吗?
EN

Software Engineering用户
提问于 2014-12-12 19:25:30
回答 1查看 130关注 0票数 1

我在编一个游戏。在这场比赛中,我有三个阶段。在第一阶段,有一个静态的进球和一个静态射手在游戏中。在第二阶段,目标将移动。在第三种情况下,两者都在移动。

我想使用抽象工厂来创建同一个家族的对象。

我想知道下列哪种设计是正确的:

拥有2家工厂:

拥有3家工厂:

我只是不知道该根据我的问题,用同样数量的家庭在右边制造混凝土工厂吗?

例如,在这个场景中,我有两个对象系列(产品)。第一个家庭是枪,第二个是目标。但我有三个阶段,我前面已经解释过了。因为产品的种类而有两个工厂是对的,还是按阶段有3个家庭呢?

EN

回答 1

Software Engineering用户

发布于 2014-12-13 10:29:15

老实说,我可能会采取完全不同的方法。我会建4个工厂,每个对象类型一个。然后,我将创建一个包含一个GunFactory实例和一个GoalFactory实例的新级别类,并创建3个级别实例(可能存储在列表中),每个实例都具有适当的工厂组合。

这有两个原因,一个是理论上的,一个是实践上的。在理论层面上,“造枪”和“造目标”的责任是否属于同一责任,这一点根本不清楚,所以单一的责任模式规定,我们应该避免有一个同时做到这两种责任的对象。另一方面,级别对象有一个明确的责任:“将初始化游戏级别所需的所有信息和行为集合在一起”。

第二个更实际的方面是,这使您可以更容易地添加新的级别,而不是原来的任何一个建议。假设您想添加第四个级别,再次使用不同的枪和目标组合;在第一个设计中,您必须更改现有的初始化代码来选择不同的工厂集,在第二个阶段,您必须为抽象工厂类创建一个新的子类,而根据我的建议,您只需在列表中添加一个新的级别实例,只需更改一行。(这也可以从理论上说是“当需要增加水平时,设计更符合开放/封闭原则”,但我更喜欢这里的实际重点)。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/266300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档