我正在开发一个使用网格系统的程序。系统需要一种基于邻居的elementType
的值对网格的每个元素起作用的方法。我目前使用的是以下内容:
enum ElementType{
A,B
}
if (neighbourUp.elemType == ElementType.A && neighbourDown == ElementType.A){
method1();
}
if (neighbourLeft == ElementType.A and current == ElementType.B){
method2();
}
,依此类推。如您所见,当类型增加时,这很难管理。理想情况下,我想在这里使用多态性,但是我觉得为每种组合创建一个类都需要太多工作。在某些情况下,某些组合的方法也可能相同。
我想要一些有关如何解决此问题的建议。此外,ElementType
还需要扩展以适应以后可能会添加的新类型。
答案 0 :(得分:0)
您可以使用 行为模式 下的 策略设计模式 来避免基于以下代码执行代码条件 您可以使用这些链接来了解有关策略设计模式的更多信息
答案 1 :(得分:0)
将两个值都与键一起存储在数组中,然后在邻居和ElementType上申请循环,然后可以使用键值进行比较,直到数组中的项为止。
答案 2 :(得分:0)
我将定义一个规则列表,然后您的主代码会简单地在所有单元格周围循环,然后调用与某个单元格匹配的规则。然后,您将来可以相对轻松地添加或删除规则,而无需更改主循环逻辑。
因此,您需要一个代表规则的类,每个规则都指示与之匹配的左/右/上/下类型,然后有一个方法(如果发生匹配)被调用。使匹配字段为空,以便您可以指示是否不关心邻居的类型是什么。
class Rule
{
public ElementType? Left { get; set; }
public ElementType? Right { get; set; }
public ElementType? Top { get; set; }
public ElementType? Bottom { get; set; }
public Action Process { get; set; }
}
...实际上,您的“过程”将需要至少一个参数,即对正在处理的单元格的引用。因此,您可以将其更改为Action或其他任何内容。