假设我想编写动态代码:
魔兽争霸3触发系统:
Event: if a unit levels
Condition: if ( triggeringUnit is alive ) && ( triggeringUnit.name="something" )
爪哇
for ( Unit triggeringUnit : leveledUnits )
{
condition1 = new IsAliveCondition(triggeringUnit);
condition2 = new HasNameCondition(triggeringUnit);
if ( new AndCondition( condition1 , condition2 ).isTrue() )
{
}
}
问题: 如果代码是静态编写的,则此代码运行,但它不能动态形成。条件 1,2 在其构造函数中需要一个“特定单元”才能被创建,因此它们不可能存储在内存中(因为它们无法被创建)。存在此问题的原因是:条件 1,2 不知道它将位于“for-loop”内,也不知道该范围内没有变量“triggeringUnit”。
为了解决这个问题,我应该创建一个包含范围内所有变量的哈希图吗?
Hashmap<String, Object> variables = ... ;
condition1 = new IsAliveCondition("triggeringUnit");
condition2 = new HasNameCondition("triggeringUnit");
condition = new AndCondition( condition1, condition2);
//At Runtime
for( Unit triggeringUnit : leveledUnits )
{
variables.put("triggeringUnit", triggeringUnit );
if ( condition.isTrue() )
{
}
}
有没有更好的解决方案/设计模式?