我正在审查一些代码(Java)并根据业务逻辑流程图进行更改。当前的代码依赖于大量的 if 语句——我想尝试摆脱这种情况。我一直在阅读有关多态性的内容,并试图围绕如何将其应用于我的情况而思考。我可以使它适用于单个条件级别,但很难将其进一步扩展到多个条件级别。代码将在运行时执行,此“逻辑”方法将传递上一步中的变量。
人为的例子:我们有 2 个动物园,“动物园 A”和“动物园 B”,以及“家”。这些中的每一个都是一个“地方”。在每个动物园中,我们有 4 个“位置”、“北”、“南”、“东”和“西”。“家”只有一个位置。我们想根据几个变量为一个人分配一个“目的地”,让他们知道他们应该去哪里。这些变量是:“地点”,与我们的地点(动物园 A、动物园 B、家)相关。'方向',与我们的位置相关,(N,S,E,W)。流程图:
|----- | 'HOME'
|Place?| ----- > *destination = 'home'*
|----- |
Zoo A | Zoo B
|---------------|----------------------------------------|
|----------| |----------|
|Direction?| |Direction?|
|----------| |----------|
| North | North
----------- *destination = 'Zoo A North' ----------- *destination = 'Zoo B North'
| East | East
----------- *destination = 'Zoo A East' ----------- *destination = 'Zoo B East'
| South | South
----------- *destination = 'Zoo A South' ----------- *destination = 'Zoo B South'
| West | West
----------- *destination = 'Zoo A West' ----------- *destination = 'Zoo B West'
因此,如果人 X 有一个动物园 A 的地点和一个南方向,那么他们应该有一个“动物园 A 南”的目的地
我的代码目前使用 If 语句非常难看:
if(Place = 'HOME')
destination = 'HOME'
if(Place = 'Zoo A')
if(Direction = North)
destination = 'Zoo A North')
if(Direct = East)
destination = 'Zoo A East')
...
if(Place = 'Zoo B')
if(Direction = North)
destination = 'Zoo B North')
if(Direct = East)
destination = 'Zoo B East')
...
我可以把它变成嵌套开关,变量为 ENUM。但我试图避免 if - else / switch 依赖,因为我有一个坏习惯,陷入其中。我尝试使用 Factory Design 来生成 Place 类,然后在每个位置和目的地上使用多态,但它开始在我的脑海中变得过于复杂。是否值得远离 if/switches?我只是想过度设计它吗?
关于如何处理这样的逻辑流程有什么建议吗?谢谢