——爲另外一個對象提供一個替身或佔位符來訪問這個對象。git
要點:程序員
爲上一章的糖果機創建一個糖果監視器,在遠程監控糖果機。緩存
遠程方法:服務器
Java RMI:Remote Method Invocation 遠程方法調用。網絡
原語(primitive)類型工具
可序列化(Serializable)類型spa
製做遠程服務:3d
步驟1:製做遠程接口。遠程接口定義出可讓客戶遠程調用的方法。客戶將用它做爲服務的類類型。Stub和實際的服務都實現此接口。代理
步驟2:製做遠程的實現。這是作實際工做的類,爲遠程接口中定義的遠程方法提供了真正的實現。這就是客戶真正想要調用的方法的對象(例如,咱們的GumballMachine)。對象
步驟3:利用rmic產生的stub和skeleton。這就是客戶和服務的輔助類。你不須要本身建立這些類,甚至連生辰它們的代碼都不用看,由於當你運行rmic工具時,這都會自動處理。你能夠在JDK中找到rmic。
步驟4:啓動RMI Registry(rmiregistry)。rmiregistry就像是電話簿,客戶能夠從中查到代理的位置(也就是客戶的stub helper對象)。
步驟5:開始遠程服務。你必須讓服務對象開始運行。你的服務實現類會去實例化一個服務的實例,並將這個服務註冊到RMI registry。註冊以後,這個服務就能夠供客戶調用了。
注意:對於RMI,程序員最常犯的三個錯誤
一、忘了在啓動遠程服務以前先啓動rmiregistry(要用Naming.rebind()註冊服務,rmiregitry必須是運行的)。
二、忘了讓變量和返回值的類型成爲可序列化的類型(這種錯誤沒法在編譯期返現,只會在運行時發現)。
三、忘了給客戶端提供stub類。
代理模式:
遠程代理
虛擬代理 :虛擬代理控制訪問實例化開銷大的對象。