代理模式應用場景一般是控制對象的通路權限,有時用于為對象增加功能。
與裝飾模式的差別是,裝飾模式增加的功能一般是特殊功能,而代理模式增加的功能是通用功能;同時,在實作上,一般代理模式中,被代理對象是在代理對象中建立的,而裝飾模式中被裝飾對象是通過構造函數從外部傳入到裝飾者中的。
裝飾模式一般使用抽象類繼承實作對被裝飾者的調用。代理模式使用的是被代理類作為代理類的成員。
代理模式分為:遠端代理、保護代理(主要用于控制被代理對象的通路權限),虛拟代理(用于延遲對象的建立),裝飾代理(添加通用的功能)
通常也将代理模式分為靜态代理和動态代理;
靜态代理一般是一對一代理,一個代理對象對應一個委托類(被代理對象)
下面看代碼,以黃牛代理賣票為例:
首先定義賣票接口:

SellTicket
定義車站(實際賣票處,需要實作賣票接口)

BusStation
定義黃牛(代理類,需要實作賣票接口)

ScalpersProxy

測試
對于通用架構一般使用動态代理,為委托類增加通用功能!
Java動态代理相關文章之前已有總結: