首页 > 编程笔记 > Java笔记

命令模式在框架(JDK和JUnit)源码中的应用

本节主要介绍命令模式在 JDK 和 JUnit 源码中的应用。

命令模式在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 接口,自然会被扫描成为一个测试用例。

所有教程

优秀文章