ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Future 设计模式

2021-01-13 13:05:02  阅读:144  来源: 互联网

标签:String APiReal APi aPiReal queryStr 设计模式 public Future


Future设计模式说明

Future 模式有点类似于商品订单。比如在网购时,当看重某一件商品事,就可以提交
订单,当订单处理完成后,在家里等待商品送货上门即可。或者说更形象的我们发送 Ajax
请求的时候,页面是异步的进行后台处理,用户无须一直等待请求的结果,可以继续浏览或
操作其他内容。

代码实现

接口

public interface APi {
    String getResult(String queryStr);
}

包装类

public class APiBz implements APi {

    private APiReal aPiReal;
    private boolean isReady;

    @Override
    public synchronized String getResult(String queryStr) {
        while (!isReady){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        return aPiReal.getResult(queryStr);
    }

    public synchronized void setAPiReal(APiReal aPiReal) {
        if (isReady){
            return;
        }
        this.aPiReal = aPiReal;
        isReady = true;
        notify();
    }
}

真实数据

import java.util.concurrent.TimeUnit;

public class APiReal implements APi {

    private  String resutl;
    public APiReal(String queryStr) {
        System.out.println("开始根据" + queryStr + "进行耗时查询");
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("查询到结果");
        this.resutl = "李四";
    }

    @Override
    public String getResult(String queryStr) {
        return this.resutl;
    }
}

客户端

public class APiControler {

    public APi getRequet(String queryStr){
        APiBz bz = new APiBz();
        new Thread(() ->{
            APiReal aPiReal = new APiReal(queryStr);
            bz.setAPiReal(aPiReal);
        }).start();
        return bz;
    }
}

测试类

public class ApiTest {
    public static void main(String[] args) {
        APiControler controler = new APiControler();
        APi lisi = controler.getRequet("lisi");
        System.out.println("发送请求成功!");
        System.out.println("=================\n开始干其他事情\n===================");
        String kk = lisi.getResult("kk");
        System.out.println("kk = " + kk);
    }
}

标签:String,APiReal,APi,aPiReal,queryStr,设计模式,public,Future
来源: https://www.cnblogs.com/xzlf/p/14271397.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有