上周顿哥给我们将了表驱动法的应用,刚好项目中也用上了,在这里对它的最简单的应用小结下。
记得当时顿哥给我们举了个最简单的实例,就是写一个方法,通过传入月份来获取传入月份的天数(二月算28天)。
当时我的想法是用一个Switch case语句来实现。脑袋里还没有表的概念。下面举出粗略的实现代码。
采用逻辑语句(switch 或 if else)实现如:
public int getDays(int month) { int days = 0; switch (month) { case 2: days = 28; break; case 4: case 6: case 9: case 11: days = 30; break; default: days = 31; break; } return days; }
若采用表来实现,具体如:
public final int[] Days = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; public int getDays(int month) { return Days[month]; }
第一点:代码易读性,尽量让代码逻辑清晰明了。
第二点:代码可维护性和可拓展性。就像安哥所说,把可能需要修改的地方放在一起尽量放在一起,
便于后期修改和维护。
第三点:高内聚,低耦合,代码块功能尽量单一,可移植性要强。
按照如上三点来分析上面两种实现方式,
就易读性来说,由于这只是最简单的应用,代码没什么逻辑。反而感觉用Switch更加直观。
但就可维护性和可拓展性来说,显然用数组来实现更易拓展,和维护。
只需要控制好数组的下标对应的值,当然在使用数组时,一定要注意越界的问题。
就可移植性来说,这也没什么可比性,因为两种一般只用于特定环境,
不过这两种思路的移植性需要好好吸收下。
在我们项目中用表驱动法来取代Switch语句功能,大大简化代码,同时又便于后期维护,修改和拓展。
记录下刚接触表驱动法的一点收获和心得。