Agent模式是業務邏輯復合處理的壹種強有力的設計模式。
生活中經常會有這樣的例子,比如妳去拜訪壹個朋友,但是他不在家,那麽妳會讓他的家人通知他。但是妳不知道這個通知的流程。如果妳有禮貌,也許妳的家人會表揚妳,如果妳態度不好,也許他們會舉報妳。妳所關心的只是通知妳的朋友,但在這個過程中可能會發生其他事情。
在程序中,處理壹個業務時,會遇到額外的業務邏輯,這些邏輯已經封裝好了。業務邏輯本身也被封裝,兩個模塊之間沒有關系。此時將使用代理模式。這裏有壹個簡單的示例代碼來說明代理模式的基本思想。
公共類ProxyObject實現對象{
對象obj
公共代理對象(){
System.out.println("這是壹個代理類");
obj = new object impl();
}
公共無效操作(){
System.out.println("代理啟動");
obj . action();
System.out.println("代理結束");
}
}
公共接口對象{
void action();
}
公共類ObjectImpl實現對象{
公共無效操作(){
system . out . println(" = = = = = = = = ");
system . out . println(" = = = = = = = = ");
System.out.println("這是代理類");
system . out . println(" = = = = = = = = ");
system . out . println(" = = = = = = = = ");
}
}
公共類測試{
公共靜態void main() {
object obj = new proxy object();
obj . action();
}
}
代理模式是間接調用的壹個實例,如上面的示例代碼所示。如果直接調用對象實現類,也就是ObjectImpl中的方法,就不能調用新的業務邏輯。但是,如果實現了壹個代理類,並在該類中調用ObjectImpl,那麽對代理類的外部訪問將間接調用ObjectImpl,這個過程可以在不修改源代碼ObjectImpl的情況下進行擴展。
spring的AOP就是基於這個原理。AOP中會出現多個邏輯復合處理。使用代理類可以準確地執行目標類中定義的邏輯單元,並擴展其他邏輯單元。