代理模式(Proxy pattern):當一個對象不想或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。靜態代理是具體去實現需要代理對象接口,覆寫方法時進行個性化操作。
單獨為代理而實現作為某個接口實現類的則為靜態代理(Static Proxy)。
不多說了,上代碼
package com.ant;
public interface Hello {
public void say();
}
package com.ant;
public class HelloImpl implements Hello {
@Override
public void say() {
System.out.println("hellw world!");
}
}
package com.ant;
public class StaticProxy implements Hello {
private Hello hello;
@Override
public void say() {
System.out.println("staticProxy welcome");
hello.say();
}
public StaticProxy(Hello hello){
this.hello = hello;
}
}
package com.ant;
public class StaticProxyTest {
public static void main(String[] args) {
Hello hello = new HelloImpl();
StaticProxy staticProxy = new StaticProxy(hello);
staticProxy.say();
}
}
總結:
靜態代理有一個弊端,就是當接口中的方法進行了變更時(新增、刪減必要實現方法時),所有的代理類都必須做相應的變更(假設有多個代理類情況下),無疑增加了代碼復雜度,復用性低,這個時候就可以有動態代理。