Thread设计中的模板模式

我们知道,在实际使用线程的时候,真正的执行逻辑都是写在run方法里面,run方法是线程的执行单元,如果我们直接使用Thread类实现多线程,那么run方法本身就是一个空的实现,如下:

Thread设计中的模板模式

thread中run方法

thread中start实现如下:

Thread设计中的模板模式

thread中的start方法

thread中的run和start是一个比较典型的模板模式,算法结构交由父类实现,具体的逻辑细节交由子类实现。下面按照thread的run和start方式来实现一个简单的小demo,帮助大家理解。

Thread设计中的模板模式

模板模式代码定义

<code>/**
     * @description: 输出用户输入的字符串信息,类似于thread中的start()
     * @auther: WEIQI
     * @date: 2019-12-17 0:56
     * @param inputString 用户输入字符串
     */
    public final void outputString(String inputString) {
        System.out.println("*******************");
        userInput(inputString);
        System.out.println("*******************");
        System.out.println();
    }

    /**
     * @description: 暴露给继承类的方法,类似于thread中的run()
     * @auther: WEIQI
     * @date: 2019-12-17 0:57
     * @param inputString 用户输入字符串
     */
    protected void userInput(String inputString) {
    }/<code>
Thread设计中的模板模式

模板模式使用

<code>/**
     * @description: 编写简单的测试功能模块
     * @auther: WEIQI
     * @date: 2019-12-17 0:58
     */
    public static void main(String[] args) {
        // 对象引用1,类似于创建一个线程
        TemeplateMethod temeplateMethod1 = new TemeplateMethod(){
            @Override
            protected void userInput(String inputString) {
                System.out.println(inputString);
            }
        };
        // 第一个引用调用算法封装方法,类似于线程调用start()方法
        temeplateMethod1.outputString("user1 input data");

        // 对象引用2,类似于创建另外一个线程
        TemeplateMethod temeplateMethod2 = new TemeplateMethod(){
            @Override
            protected void userInput(String inputString) {
                System.out.println(inputString);
            }
        };
        // 第二个引用调用算法封装方法,类似于线程调用start()方法
        temeplateMethod2.outputString("user2 input data");
    }/<code>

上面代码代码大家可以拷贝到自己电脑上测试。

运行结果:

Thread设计中的模板模式

所有博文都在公众号《编程之艺术》中收集!想了解的大佬可以关注关注。


分享到:


相關文章: