2017-04-11 75 views
0

我正在閱讀一本關於設計模式的書,並試圖在我的一個應用程序中實現代理模式,特別是遠程代理。實現遠程代理

我正在考慮在查詢遠程REST API時使用這種模式,但我不確定自己正在考慮的是否滿足遠程代理的定義。

以下是我到目前爲止的簡化版本。

MachineApiProxy將被應用程序用於查詢位於另一臺計算機上的遠程API。

// Interface 
public interface MachineApi 
{ 
    public Integer Infocon(); 

    public InetAddress Ip(); 
} 


// Implements above interface 
public class MachineApiProxy implements MachineApi 
{ 
    public Integer Infocon() 
    { 
     // query remote REST API 
    } 

    public InetAddress Ip() 
    { 
     // query remote REST API 
    } 

} 

您認爲這滿足實現遠程代理嗎?

回答

1

Proxy模式中的參與者是:

  • 主題 - 定義RealSubject和代理
  • RealSubject通用接口 - 真正的對象,它代理呈現
  • 代理 - 保持一個真正的主體基準,所以他可以作爲surogate

因此,在您的情況下,查詢遠程API的RealSubject丟失。 RealSubject應連接到遠程端點,...
MachineApi看起來像主題。
在MachineApiProxy中注入RealSubject。

+0

我不明白我可以如何將其應用於調用遠程API。 Subject和RealSubject有什麼區別?主題只是使用RealSubject來調用API,而我的應用程序中需要調用API的任何內容都會經過主題? –

+0

在RealSubject中實現「調用遠程API」,可以使用更直觀的名稱,如RemoteSubject或RemoteMachineApi。 RealSubject實現Subject,但Proxy保持對RealSubject的引用。通過這種方法,代理服務器在客戶端和RealSubject(一個surogate)之間就存在障礙,因此客戶端不知道誰是RealSubject。檢查此鏈接https://dzone.com/articles/design-patterns-proxy,希望解釋有幫助。 – dstar55

+0

代理在SpringFramework內部用於AOP,intercetors等 – dstar55