假设一个很常见的场景:
XYZMovie(一个虚构电影网站)提供了接口可以让开发者获取某部电影的基本信息(电影名、演员、放映时间、评分等)
接口类似这样:http:api.xyzmovie.com/get?nam...
我利用爬虫缓存了该网站的数据到本地数据库,现在有一个电影查询程序,它应该能设置本地或网络优先查询,如本地或网络查询无果则换另一种查询:
class XYZMovieDataSource
{
XYZMovie GetMovie(string id or name, etc, priority)
{
XYZMovie m;
if(priority == local) { dosomething }
else { dosomething }
return m;
}
XYZMovie GetMovieFromLocal(string id or name, etc) { dosomething }
XYZMovie GetMovieFromNetwork(string id or name, etc) { dosomething }
}
请问有什么更好的设计模式吗?
使用 CountDownLatch ,设置为 1,同时多线程去获取远程的本地,谁先获取到,返回谁。
多次运行成功你会发现可以有不同的值
因为
Thread.sleep(new Random().nextInt(3) * 1000);
随机设置他们的快慢正如如果你本地数据库中没有,那么自然就去等待远程了,那么你本地可以不调用
countDownLatch.countDown();
主线程就会一直等待