0

因此,假设您有一个名为 Human 的类,以及一堆其他类都扩展了 Human(John、Sally、Mark)。Human 有注解“@Tags({"human"})”,John 有注解“@Tags({"john"})”等等。所有类都有对应的标签。

我的问题是:如何使用这些标签来确定要制作的对象?

就像,用户将输入“john”“sally”或“mark”,我想制作相应的对象......

4

2 回答 2

0

我在一个项目中遇到过类似的要求。

这就是我所做的,

  1. 设计读取类的策略 :这是必需的,因为在您的任何代码中都没有直接引用这些类。因此这些类不会被任何 ClassLoader 自动处理。使用 Class.forName() 动态加载类

  2. 生成工厂:将注释的范围设为运行时。这将允许您处理已阅读的类文件并从中提取自定义注释值。然后你可以在工厂类的注解中注册这个类的名字。

  3. 使用工厂生成对象:现在您有一个工厂,当您传递标签名称时,它可以返回您的类的对象。使用反射创建一个对象。

要了解更多关于工厂模式的信息,请参考链接:工厂模式

于 2013-09-16T12:59:41.693 回答
0

查看策略模式

一种软件设计模式,可以在运行时选择算法的行为

您可以使用此模式将输入匹配到工厂或作为enum将名称映射到给定类类型的一部分(尽管这种方法存在几个“硬编码”问题)。

至于对象实例的构造,我建议你也看看工厂模式,并将两者结合起来以抽象的方式创建这些对象。

我还建议您不要像这样标记您的对象,因为您正在根据您的代码库对用户输入期望进行硬编码。至少将这样的期望外部化到配置文件(.properties.xml)中,以便输入的映射可以独立于代码而改变。

于 2013-09-16T11:03:04.393 回答