命令模式在框架(JDK和JUnit)源码中的应用
本节主要介绍命令模式在 JDK 和 JUnit 源码中的应用。
实际上调用线程的 start() 方法之后,就有资格去抢 CPU 资源,而不需要编写获得 CPU 资源的逻辑。而线程抢到 CPU 资源后,就会执行 run() 方法中的内容,用 Runnable 接口把用户请求和 CPU 执行进行解耦。
实际上,平时我们在编写用例时,只需要实现 Test 接口就会被认为这是一个测试用例,执行时就会被自动识别。通常做法都是继承 TestCase 类,TestCase 类的源码如下。
命令模式在JDK源码中的应用
首先来看 JDK 中的 Runnable 接口,Runnable 相当于命令模式中的抽象命令角色。Runnable 中的 run() 方法就当于 execute() 方法。public interface Runnable { public abstract void run(); }只要是实现了 Runnable 接口的类都被认为是一个线程,相当于命令模式中的具体命令角色。
实际上调用线程的 start() 方法之后,就有资格去抢 CPU 资源,而不需要编写获得 CPU 资源的逻辑。而线程抢到 CPU 资源后,就会执行 run() 方法中的内容,用 Runnable 接口把用户请求和 CPU 执行进行解耦。
命令模式在JUnit源码中的应用
下面再来看大家非常熟悉的 junit.framework.Test 接口。package junit.framework; public interface Test { public abstract int countTestCases(); public abstract void run(TestResult result); }Test 接口中有两个方法,第一个是 countTestCases() 方法,用来统计当前需要执行的测试用例总数。第二个是 run() 方法,用来执行具体的测试逻辑,其参数 TestResult 用来返回测试结果。
实际上,平时我们在编写用例时,只需要实现 Test 接口就会被认为这是一个测试用例,执行时就会被自动识别。通常做法都是继承 TestCase 类,TestCase 类的源码如下。
public abstract class TestCase extends Assert implements Test { ... public void run(TestResult result) { result.run(this); } ... }可以看出,TestCase 类也实现了 Test 接口。我们继承 TestCase 类,相当于也实现了 Test 接口,自然会被扫描成为一个测试用例。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算