`

表驱动法实例

阅读更多

获得月的天数是典型的直接访问驱动表方式的实例,下面我们来展示一下:

MonthDaysTest.java

package com.study.test;

import org.junit.Assert;
import org.junit.Test;

import com.study.MonthDays;

public class MonthDaysTest {

	@Test
	public void test_when_given_month_number_return_month_days() {
		MonthDays monthDays = new MonthDays();
		Assert.assertEquals(31, monthDays.getTotalDayInMonth(1));
		Assert.assertEquals(28, monthDays.getTotalDayInMonth(2));
		Assert.assertEquals(31, monthDays.getTotalDayInMonth(3));
		Assert.assertEquals(30, monthDays.getTotalDayInMonth(4));
		Assert.assertEquals(31, monthDays.getTotalDayInMonth(5));
		Assert.assertEquals(30, monthDays.getTotalDayInMonth(6));
		Assert.assertEquals(31, monthDays.getTotalDayInMonth(7));
		Assert.assertEquals(31, monthDays.getTotalDayInMonth(8));
		Assert.assertEquals(30, monthDays.getTotalDayInMonth(9));
		Assert.assertEquals(31, monthDays.getTotalDayInMonth(10));
		Assert.assertEquals(30, monthDays.getTotalDayInMonth(11));
		Assert.assertEquals(31, monthDays.getTotalDayInMonth(12));
	}
	
	@Test
	public void test_when_given_month_number_return_month_days_by_table() {
		MonthDays monthDays = new MonthDays();
		Assert.assertEquals(31, monthDays.getTotalDayInMonthFromTable(1));
		Assert.assertEquals(28, monthDays.getTotalDayInMonthFromTable(2));
		Assert.assertEquals(31, monthDays.getTotalDayInMonthFromTable(3));
		Assert.assertEquals(30, monthDays.getTotalDayInMonthFromTable(4));
		Assert.assertEquals(31, monthDays.getTotalDayInMonthFromTable(5));
		Assert.assertEquals(30, monthDays.getTotalDayInMonthFromTable(6));
		Assert.assertEquals(31, monthDays.getTotalDayInMonthFromTable(7));
		Assert.assertEquals(31, monthDays.getTotalDayInMonthFromTable(8));
		Assert.assertEquals(30, monthDays.getTotalDayInMonthFromTable(9));
		Assert.assertEquals(31, monthDays.getTotalDayInMonthFromTable(10));
		Assert.assertEquals(30, monthDays.getTotalDayInMonthFromTable(11));
		Assert.assertEquals(31, monthDays.getTotalDayInMonthFromTable(12));
	}
}

MonthDays.java

package com.study;

public class MonthDays {

	/*
	 * if...else..
	 *  获得某一月中的总天数,monthIndex从 1 开始
	 */
	public int getTotalDayInMonth(int month) {
		int totalDay = 0;
		if (month == 2) {
			totalDay = 28;
		} else if (month == 4 || month == 6 || month == 9 || month == 11) {
			totalDay = 30;
		} else {
			totalDay = 31;
		}
		return totalDay;
	}
	
	private int[] totalDayTable = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	/*
	 * 表驱动法
	 * 获得某一月中的总天数,monthIndex从 1 开始
	 */
	public int getTotalDayInMonthFromTable(int month) {
		return totalDayTable[month - 1];
	}
}

 

附采用表驱动法对实际代码进行重构实例:

package com.bijian.study;

import java.util.HashMap;
import java.util.Map;

public class TableMethod {

	public void process(String state) {
		String needState;
		String needChangeResult;
		
		//原来的写法
		if("COMPIETED".equals(state)) {
			needState = "COMPIETED";
			needChangeResult = "APPROVE_OK";
		}else if("REJECTED".equals(state)) {
			needState = "NEW";
			needChangeResult = "APPROVE_FAIL";
		}else if("ABANDON".equals(state)) {
			needState = "NEW";
			needChangeResult = "APPROVE_FAIL";
		}
		
		//表驱动法
		Map<String, String[]> stateTable = new HashMap();
		stateTable.put("COMPIETED", new String[]{"COMPIETED", "APPROVE_OK"});
		stateTable.put("REJECTED", new String[]{"NEW", "APPROVE_FAIL"});
		stateTable.put("ABANDON", new String[]{"NEW", "APPROVE_FAIL"});
		needState = stateTable.get(state)[0];
		needChangeResult = stateTable.get(state)[1];
	}
}
分享到:
评论

相关推荐

    任务驱动法在《可编程控制器》教学中的应用

    实践性是任务驱动法的另一个关键要素,任务应以实践活动为主,让学生通过实际操作来理解和掌握知识。同时,任务还需要具有创新性,鼓励学生发挥创新思维,解决实际问题。例如,通过让学生观察并分析可编程控制器控制...

    stm 32 -lcd 驱动实例

    STM32是一款基于ARM Cortex-M内核的微控制器,由意法半导体(STMicroelectronics)生产,广泛应用在嵌入式系统设计中。LCD(Liquid Crystal Display)驱动是STM32在实现图形化用户界面时的重要功能,9322则是LCD控制...

    深入数据驱动编程之表驱动法的详解

    #### 四、表驱动法的应用实例 为了更好地理解表驱动法的工作原理,下面我们将通过一个具体的例子来展示其应用过程。 ##### 1. 问题背景 假设我们需要设计一个消息(事件)驱动的系统,其中一个模块需要与其他多个...

    ARM嵌入式Linux设备驱动实例开发(源代码)

    了解设备树语法和使用方法是驱动开发的关键。 9. **调试技巧**:使用printk、dmesg、gdb等工具进行驱动程序的调试,理解和使用kernel log、sysfs和procfs等接口来获取系统状态和驱动运行信息。 10. **实例分析**:...

    stm32汇编实例LCD驱动

    STM32汇编实例LCD驱动是嵌入式系统开发中的一个重要环节,主要涉及到微控制器STM32、汇编语言编程以及LCD显示屏的硬件接口和驱动程序。STM32是一款基于ARM Cortex-M内核的微控制器,由意法半导体公司生产,广泛应用...

    Python程序设计任务驱动式教程(微课版)_实例代码&任务代码.zip

    《Python程序设计任务驱动式教程(微课版)》是一份专为初学者和进阶者设计的教学资料,旨在通过实例代码和任务代码的方式,帮助学习者深入理解Python编程语言的核心概念与应用技巧。这份资源包含了一系列精心设计的...

    VHDL语言在实现FPGA驱动LED静态显示中的应用实例.txt

    ### VHDL语言在实现FPGA驱动LED静态显示中的应用实例 #### 文件名:decoder.vhd 本文件通过一个具体的VHDL代码示例,展示了如何使用VHDL语言设计一个用于驱动LED静态显示的FPGA模块。该模块主要用于对输入信号进行...

    任务驱动法中高职计算机教学运用.pdf

    - **提高学生的学习兴趣**:任务驱动法结合实例教学,让学生在实际操作中体验计算机应用的乐趣,从而提高学习积极性。例如,教师先演示操作,学生模仿,然后通过提问和任务驱动的方式,让学生主动参与,提高课堂...

    涡量法解方腔驱动流

    在文件"涡量法解方腔驱动流"中,可能包含了具体的应用实例,比如二维或三维腔体内的流动问题。这些问题通常涉及湍流模型,因为方腔内部的流场往往具有复杂的涡旋结构和湍流特征。涡量法可以有效地捕捉这些流动特性,...

    软件测试用例的经典实例

    本文介绍了软件测试用例的经典实例,包括黑盒测试的实例,等价类法、边界值法、错误推测法、因果图法、判定表驱动法等。这些实例对大家编写测试用例很有帮助。 一、测试用例的基本要点 一个好的测试用例应该包含...

    EK-STM32实例驱动文档包

    EK-STM32实例驱动文档包是针对STMicroelectronics(意法半导体)公司生产的STM32系列微控制器的驱动程序开发参考资料。STM32是一款基于ARM Cortex-M内核的高性能、低功耗微控制器,广泛应用于嵌入式系统设计中。该...

    Java项目开发课程中项目驱动教学法的应用设计.pdf

    Java项目开发课程中项目驱动教学法的应用设计 本文探讨了项目驱动教学法在Java项目开发课程中的应用设计。项目驱动教学法的核心是项目,没有项目做支撑,项目驱动教学法只能沦为方法论。因此,项目的选择和实施是...

    任务驱动法在中职PLC教学中的运用.pdf

    任务驱动法是一种以任务为中心的教学方法,强调通过具体任务的实践和探究来促进学生的积极学习和能力发展。在中职院校的PLC(可编程逻辑控制器)教学中,任务驱动法的应用可以有效激发学生的学习兴趣,提升其实践...

    任务驱动法在高职跨境电商课程中的运用.zip

    三、任务驱动法在高职跨境电商课程中的应用实例 1. 模拟跨境电商平台运营:学生分组建立虚拟店铺,进行产品上架、营销策划、客户服务等模拟操作,熟悉平台规则和流程。 2. 真实项目对接:与企业合作,参与真实跨境...

    单片机一体化教学中项目驱动法之教学设计.pdf

    在传统的单片机课程教学中,学生往往因为抽象的知识点而逐渐丧失学习兴趣,项目驱动法正好解决了这一问题。项目驱动法的核心在于让学生在完成具体项目的过程中掌握相关理论知识和实践技能。 在单片机一体化教学中,...

    任务驱动法在高职建筑CAD课程教学中的应用.pdf

    任务驱动法是一种以完成特定任务为目标,通过任务的实施过程来激发学生学习兴趣,培养其自主学习能力和解决问题能力的教学方法。在高职建筑CAD课程教学中应用任务驱动法,能够有效提高学生的学习效率和教学质量。...

    STM32H750 +OV5640摄像头驱动实例

    STM32H750是意法半导体(STMicroelectronics)推出的一款高性能、低功耗的微控制器,属于STM32H7系列。这个系列基于Arm Cortex-M7内核,具有高速浮点运算能力,适合于高精度控制、图像处理等复杂应用。OV5640则是一...

    sx1262驱动程序基于STM32F103_STM32F103_sx1276_sx1262驱动_sx1268驱动程序_sx126

    STM32F103是意法半导体(STMicroelectronics)推出的基于ARM Cortex-M3内核的微控制器,广泛应用于嵌入式系统设计,具有丰富的外设接口和较高的处理能力,适合于驱动复杂的无线通信模块如SX1262。 SX1276是另一款...

    任务驱动法在机械CAD教学中的应用.pdf

    在机械CAD教学中,运用任务驱动法的一个典型实例是绘制吊钩。这个过程包括几个阶段:任务分析、主要命令的选择、尺寸参考、任务实施参考以及任务点评。在任务分析阶段,教师需要明确指出任务的目的和要解决的问题,...

Global site tag (gtag.js) - Google Analytics