java代理示例

代理模式在Spring中,运用的淋漓精致,面向切面的编程,变得很有趣


假设有个实际书籍供应商,网上书籍供应商,而网上书籍供应商是代理商
package com.study.proxy; 

public interface Subject { 

         public void sailBook(); 
} 


public class RealSubject implements Subject { 

@Override 
public void sailBook() { 
System.out.println("卖书"); 
} 

} 


public class SubjectHandler implements InvocationHandler { 

private Object subject; 

public void setSubject(Object subject) { 
this.subject = subject; 
} 

@Override 
public Object invoke(Object proxy, Method method, Object[] args) 
throws Throwable { 
if (subject == null) { 
System.out.println("无权"); 
return null; 
} else { 
return method.invoke(subject, args); 
} 

} 

} 


客户端使用: 
package com.study.proxy; 

import java.lang.reflect.Proxy; 

public class Client { 

public static void main(String[] args) { 
Subject subject = new RealSubject(); 
SubjectHandler handler1 = new SubjectHandler(); 
handler1.setSubject(subject); 
SubjectHandler handler2 = new SubjectHandler(); 
Subject proxySubject1 = (Subject) Proxy.newProxyInstance( 
RealSubject.class.getClassLoader(), 
RealSubject.class.getInterfaces(), handler1); 
Subject proxySubject2 = (Subject) Proxy.newProxyInstance( 
RealSubject.class.getClassLoader(), 
RealSubject.class.getInterfaces(), handler2); 
proxySubject1.sailBook(); 
proxySubject2.sailBook(); 
} 
} 
 

你可能感兴趣的:(java代理)