Future模式可以簡單的看成是
Proxy 模式 與
Thread-Per-Message 模式 的結(jié)合,在Proxy模式中,用一個(gè)Proxy來代替真正的目標(biāo)(Subject)生成,目標(biāo)的生成可能是費(fèi)時(shí)的,例如在開啟一個(gè)內(nèi)嵌圖片的文件中,希望程式能儘快完成開啟文件的動(dòng)作,並顯示一個(gè)可接受的畫面給使用者看,在還不需要看到圖片的頁面中先使用Proxy代替真正的圖片載入,只有在真正需要看到圖片時(shí),才由Proxy物件載入真正的圖片。
考慮這樣一個(gè)情況,使用者可能快速翻頁瀏覽文件中,而圖片檔案很大,如此在瀏覽到有圖片的頁數(shù)時(shí),就會(huì)導(dǎo)致圖片的載入,因而造成使用者瀏覽文件時(shí)會(huì)有停頓的現(xiàn)象,所以我們希望在文件開啟之後,仍有一個(gè)背景作業(yè)持續(xù)載入圖片,如此使用者在快速瀏覽頁面時(shí),所造成的停頓可以獲得改善。
Future模式在請(qǐng)求發(fā)生時(shí),會(huì)先產(chǎn)生一個(gè)Future物件給發(fā)出請(qǐng)求的客戶,它的作用就像是Proxy物件,而同時(shí)間,真正的目標(biāo)物件之生成,由一個(gè)新的執(zhí)行緒持續(xù)進(jìn)行(即Thread-Per-Message),真正的目標(biāo)物件生成之後,將之設(shè)定至Future之中,而當(dāng)客戶端真正需要目標(biāo)物件時(shí),目標(biāo)物件也已經(jīng)準(zhǔn)備好,可以讓客戶提取使用。
一個(gè)簡單的Java程式片段示範(fàn)可能像是這樣:
....
public Future request() {
final Future future = new Future();
new Thread() {
public void run() {
// 下面這個(gè)動(dòng)作可能是耗時(shí)的
RealSubject subject = new RealSubject();
future.setRealSubject(subject);
}
}.start();
return future;
}

文章來源:
http://www.aygfsteel.com/jesson2005/articles/111199.html