// Subject
interface Subject {
void request();}
// RealSubject
class RealSubject implements Subject {
@Override
public void request(){
System.out.println("RealSubject is handling the request.");}}
// Proxy
class Proxy implements Subject {
private RealSubject realSubject;
public Proxy(RealSubject realSubject){
this.realSubject = realSubject;}
@Override
public void request(){
System.out.println("Proxy is handling the request.");
realSubject.request();
System.out.println("Proxy has finished handling the request.");}}
// Client
public class Client {
public static void main(String[] args){
RealSubject realSubject = new RealSubject();
Proxy proxy = new Proxy(realSubject);
proxy.request();}}
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;
// Subject
interface Subject {
void request();}
// RealSubject
class RealSubject implements Subject {
@Override
public void request(){
System.out.println("RealSubject is handling the request.");}}
// InvocationHandler
class DynamicProxyHandler implements InvocationHandler {
private Object realSubject;
public DynamicProxyHandler(Object realSubject){
this.realSubject = realSubject;}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Proxy is handling the request.");
Object result = method.invoke(realSubject, args);
System.out.println("Proxy has finished handling the request.");return result;}}
// Client
public class Client {
public static void main(String[] args){
RealSubject realSubject = new RealSubject();
Subject proxy =(Subject) Proxy.newProxyInstance(
RealSubject.class.getClassLoader(),
RealSubject.class.getInterfaces(),
new DynamicProxyHandler(realSubject));
proxy.request();}}