我认为一种可能的解决方案如下:
我们将使用反射来获取所有属性,然后这些属性将用于将可定制的参数提供给用户。
假设这是我们的主题类:
Class Theme{
//Customizable Theme related attributes
private Color background;
private Color baseColor;
//Business Domain related attributes
private User user;
}
我们可以使用反射来获取属性列表Theme::getDeclaredFields
,然后我们可以获取它们的名称并告知用户这些属性并“询问”他想要自定义哪些值。
这里的问题是我们的类具有与主题“外观”字段无关的属性。例如,不应将主题用户字段(所有者?)带给用户。这个问题可以通过使用注解来解决(>= JDK 1.5)
我们的课程将如下所示:
Class Theme{
//Customizable Theme related attributes
@LookAndFeel(alias="Background", description="The background color of the player")
private Color background;
@LookAndFeel(alias="Base Color", description="The base color of the player")
private Color baseColor;
//Business Domain related attributes
private User user;
}
现在再次使用反射,我们只能调出外观相关的属性(通过检查注释),并且我们有一个关于字段的用户友好信息作为奖励:例如。我们将能够告诉用户他可以调整一些“Base Color”参数(比使用我们的属性名称“baseColor”更好)。