血淋林的例子告訴你,為什麼防“上傳漏洞”要用白名單
阿新 • • 發佈:2022-04-28
代理模式(Proxy Pattern)
GoF中給出的代理模式的定義為: 代理模式給某一個物件提供一個代理或佔位符,並由代理物件來控制對原物件的訪問。 代理模式的英文叫做Proxy或Surrogate,它是一種物件結構型模式。 代理模式根據其目的和實現可分為很多種類,常用的代理模式包括如下幾種: (1)遠端代理(Remote Proxy)————為一個位於不同的地址空間的物件提供一個本地的代理物件,這個不同的地址空間可以是在同一臺主機中,也可以是在另一臺主機中,遠端代理又稱為大使(Ambassador) (2)虛擬代理(Virtual Proxy)————如果需要建立一個資源消耗較大的物件,先建立一個消耗相對較小的物件來表示,真實物件只在需要時才會被真正建立。 (3)保護代理(Protect Proxy)————控制一個目標操作的結果提供臨時的儲存空間,以便多個客戶端可以共享這些結果。 (4)緩衝代理(Cache Proxy)————為某一個目標操作的結果提供臨時的儲存空間,以便多個客戶端可以共享這些結果。 (5)只能引用代理(Smart Reference Proxy)————當一個物件被引用時,提供一些額外的操作,例如將物件被呼叫的次數記錄下來。
程式碼實現: 1.抽象主題類——BuyTicket.java
public interface BuyTicket { public void showticket();}
2.具體主題類——Train.java
public class Train implements BuyTicket { @Override public void showticket() { System.out.println("one ticket"); }}
3.代理角色類——TicketCenter.java
public class TicketCenter implements BuyTicket { private BuyTicket ticket; public TicketCenter(BuyTicket ticket) { this.ticket = ticket; } @Override public void showticket() { ticket.showticket(); } public void buy() { System.out.println("by proxy"); showticket(); }}
4.客戶端測試類
public class ProxyPattern { public static void main(String args[]) { BuyTicket x = new Train(); TicketCenter y = new TicketCenter(x); y.buy(); }}
執行結果:
by proxyone ticket