【发布时间】:2023-03-29 13:29:01
【问题描述】:
我正在寻找一种设计模式来从模板对象生成对象。在我的游戏中,我有不同类型的项目,这些项目将从模板对象中生成。
目前我通过继承解决了这个问题,每个模板实体都实现了该方法:
public Item generate(EntityManager em);
我的继承结构是:
ItemTemplate -> creates an Item
|_ ArmorTemplate -> creates and Armor
|_ WeaponTemplate -> creates an Weapon
|_ ....and more ....
当我创建一个项目时,我将实体管理器传递给模板,我得到一个持久对象。 例如。 ArmorTemplate 返回我一个持久的 Armor 等等。
如果项目生成需要任何特定实体,我必须在生成方法中进行查找。我想用一个基于容器的解决方案来解决这个问题,我可以注入我需要的 EJB,而不必让我的实体管理器通过创建工作流。
从 Hibernate 我得到一个模板对象列表,我不想做一个 instanceof 来调用正确的工厂方法。
我当前的解决方案有效,但感觉不是很优雅。任何输入都可以。 ;-)
提前致谢。 问候,米
【问题讨论】:
-
您当前的实现与工厂模式有何不同?
-
这是一种工厂模式,每个模板都知道它必须返回哪个对象以及如何返回。但是如果 pojo 样式可以替换为 ejb 解决方案以获得依赖注入等的好处,我会更担心。
-
这是什么意思:“从 Hibernate 我得到一个模板对象列表,我不想做一个 instanceof 来调用正确的工厂方法。”如果模板对象只是工厂,我会将它们作为单例服务连接到实体管理器的引用。
-
确定哪些项目在第一次打开的游戏容器中,我选择分配给它的所有模板对象。所以我有这个 ItemTemplate 对象列表,我从中生成我的项目并将其添加到玩家可以拾取它的容器中。所以我的模板存储在数据库中并分配给各种容器,它们可以在游戏中弹出。
标签: java design-patterns ejb