
代理(Proxy)
概念
代理模式是一種結構型模式,常用在一些需要I/O、網路通訊或是記憶體占用大的物件上,提供一個代理器在物件的讀取前,可以有效減少物件重複讀取的消耗。
比如維基百科的頁面人人都可以查看、編輯,如果一個頁面在每次編輯後都立即產生新網頁,或是一個頁面在每次使用者查詢時都產生新網頁,這每次的產生如果量大起來對於伺服器來說是一個大負擔。
實際上,維基百科會有將資料儲存與網路代理分開(通常流量大的網站也都會這樣做),代理伺服器在每次使用者查詢時,會去確認代理內的網頁是不是最新版本,如果是就直接將頁面提供給使用者,否才會產生新網頁,進而減少伺服器的讀取次數。
範例
//**************
//* author: cian
//* 20231027
//**************
/* base interface */
interface IWikiPage
{
string GetPageContent();
}
/* Wiki頁面讀取動作 */
class WikiPage : IWikiPage
{
public string GetPageContent()
{
return LoadPageFromServer();
}
private string LoadPageFromServer()
{
Console.WriteLine("Load page from server.")
return "PAGE CONTENT";
}
}
/* Wiki頁面代理 */
class WikiPageProxy : IWikiPage
{
string _PageContent = string.empty;
WikiPage page = new WikiPage();
public string GetPageContent()
{
if(_PageContent == string.empty)
_PageContent = page.GetPageContent();
return _PageContent;
}
}
class MainApp
{
static void Main(string[] args)
{
IWikiPage page = new WikiPageProxy();
for(int i = 0; i < 100; i++)
{
//100次讀取就不需要到伺服器重複載入。
page.GetPageContent();
}
}
}
結語
以上為學習過程的問題紀錄
如果文章有誤,歡迎前輩留言請不吝指教。
發佈留言