1. 程式人生 > 其它 >血淋林的例子告訴你,為什麼防“上傳漏洞”要用白名單

血淋林的例子告訴你,為什麼防“上傳漏洞”要用白名單

代理模式(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