package com.the151suggestions.part7;
/**
* Created by wanggs on 2017/7/24.
* 动态代理可以使代理模式更加灵活
*/
public class S06 {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.request();
}
}
// 抽象主题角色
interface Subject {
public abstract void request();
}
// 具体主题角色
class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject.request");
}
}
// 代理主题角色
class Proxy implements Subject {
// 要代理的实体类
private RealSubject realSubject;
// 默认被代理者
public Proxy() {
realSubject = new RealSubject();
}
// 实现接口定义的方法
@Override
public void request() {
before();
// 代理对象的方法执行
realSubject.request();
after();
}
private void after() {
System.out.println("Proxy.after");
}
private void before() {
System.out.println("Proxy.before");
}
}
动态代理
package com.the151suggestions.part7;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* Created by wanggs on 2017/7/24.
* 动态代理可以使代理模式更加灵活
*/
public class S06 {
public static void main(String[] args) {
// 动态代理
/* Proxy proxy = new Proxy();
proxy.request();*/
// 具体主题角色, 也就是被代理类
Subject subject = new RealSubject();
// 代理实例的处理Handler
InvocationHandler invocationHandler = new SubjectHandler(subject);
// 当前加载器
ClassLoader classLoader = subject.getClass().getClassLoader();
// 动态代理
Subject proxy = (Subject) Proxy.newProxyInstance(classLoader,subject.getClass().getInterfaces(),invocationHandler);
proxy.request();
}
}
// 抽象主题角色
interface Subject {
public abstract void request();
}
// 具体主题角色
class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject.request");
}
}
/*
// 代理主题角色
class Proxy implements Subject {
// 要代理的实体类
private RealSubject realSubject;
// 默认被代理者
public Proxy() {
realSubject = new RealSubject();
}
// 实现接口定义的方法
@Override
public void request() {
before();
// 代理对象的方法执行
realSubject.request();
after();
}
private void after() {
System.out.println("Proxy.after");
}
private void before() {
System.out.println("Proxy.before");
}
}*/
class SubjectHandler implements InvocationHandler{
// 被代理对象
private Subject subject;
public SubjectHandler(Subject subject){
this.subject = subject;
}
// 委托处理方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 预处理
System.out.println("预处理");
Object object = method.invoke(subject,args);
// 后处理
System.out.println("后处理");
return object;
}
}