天天看點

設計模式——代理模式

代理模式應用場景一般是控制對象的通路權限,有時用于為對象增加功能。

與裝飾模式的差別是,裝飾模式增加的功能一般是特殊功能,而代理模式增加的功能是通用功能;同時,在實作上,一般代理模式中,被代理對象是在代理對象中建立的,而裝飾模式中被裝飾對象是通過構造函數從外部傳入到裝飾者中的。

裝飾模式一般使用抽象類繼承實作對被裝飾者的調用。代理模式使用的是被代理類作為代理類的成員。

代理模式分為:遠端代理、保護代理(主要用于控制被代理對象的通路權限),虛拟代理(用于延遲對象的建立),裝飾代理(添加通用的功能)

通常也将代理模式分為靜态代理和動态代理;

靜态代理一般是一對一代理,一個代理對象對應一個委托類(被代理對象)

 下面看代碼,以黃牛代理賣票為例:

首先定義賣票接口:

設計模式——代理模式
設計模式——代理模式

SellTicket

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

設計模式——代理模式
設計模式——代理模式

BusStation

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

設計模式——代理模式
設計模式——代理模式

ScalpersProxy

設計模式——代理模式
設計模式——代理模式

測試

對于通用架構一般使用動态代理,為委托類增加通用功能!

Java動态代理相關文章之前已有總結: