我有一个接口GenericExpression,它被扩展为创建表达式(即AndExpression,OrExpression等)。
每个GenericExpression实现都有一个表示它的字符串(即“&”,“+”等)(存储为静态变量“stringRep”)
有没有办法获取用户输入字符串并检查它是否代表GenericExpression?
如果不是(似乎很可能是这种情况),有没有办法用重构设计达到类似的效果?
谢谢!
编辑:上面提供了更多细节。
此外,最终目标是能够任意实现GenericExpression并仍然检查字符串是否表示其子类之一的实例。因此,我不能只存储一个实现映射 - 字符串表示对,因为它会使得GenericExpression不再容易扩展。
此外,这是家庭作业
答案 0 :(得分:3)
我认为您需要在某处定义程序支持的表达式。我认为最好的方法是使用map,将接口映射到字符串。这样,您可以使用其表示字符串轻松查找表达式。您将在何处定义此地图取决于您的设计。一种可能性是辅助类中的静态方法,它将表达式解析为如下字符串:
Expressions.get("&").invoke(true, false);
get
是Expressions
上的静态方法,用于在静态地图中查找所需的表达式。您必须在静态初始化程序中初始化此映射,或让表达式实例在创建时添加它们。
修改强>
(我想在答案上发表评论,但似乎已被删除)
就个人而言,我不喜欢课程注册的想法。它让我感觉不能控制我的代码。我更愿意在Expressions
类中实例化类。无论如何,必须为每个新的子类编写注册类的代码。我更喜欢将这个代码集中在一个类中,所以如果我想改变逻辑或重构,我只需触摸一个类。