package com.wangjun.designPattern.proxy;
/*
* 我们有一个人类的接口,有很多种职业,比如教师,学生
*/
public interface Person {
//获取本职业的职责
public String getDuty();
}
目标对象1:
package com.wangjun.designPattern.proxy;
public class Student implements Person {
@Override
public String getDuty() {
return "学习知识";
}
}
目标对象2:
package com.wangjun.designPattern.proxy;
public class Teacher implements Person {
@Override
public String getDuty() {
return "教书育人";
}
}
代理对象:
package com.wangjun.designPattern.proxy;
import java.util.HashMap;
import java.util.Map;
/*
* 通过代理,加入缓存功能
*/
public class CachedPersonProxy implements Person{
private Person person;
private Map<Person,String> map = new HashMap<>();;
public CachedPersonProxy(Person person) {
this.person = person;
}
@Override
public String getDuty() {
String duty = map.get(person);
if(null == duty) {
duty = person.getDuty();
map.put(person, duty);
}
return duty;
}
}
测试类:
package com.wangjun.designPattern.proxy;
public class Main {
public static void main(String[] args) {
Teacher teacher = new Teacher();
CachedPersonProxy proxy = new CachedPersonProxy(teacher);
System.out.println(proxy.getDuty());
}
}
package com.wangjun.designPattern.proxy;
public class Main {
public static void main(String[] args) {
Person teacher = new Teacher();
System.out.println(teacher.getClass());
//使用动态代理
ProxyFactory proxyFactory = new ProxyFactory(teacher);
Person teacherProxy = (Person) proxyFactory.getProxyInstance();
System.out.println(teacherProxy.getClass());
System.out.println(teacherProxy.getDuty());
System.out.println(teacherProxy.getDuty());
}
}
package com.wangjun.designPattern.proxy;
public class Main {
public static void main(String[] args) {
// 使用cglib
// 目标对象
Doctor target = new Doctor();
System.out.println(target.getClass());
// 代理对象
Doctor proxyCglib = (Doctor) new CglibProxyFactory(target).getProxyInstance();
// 执行代理对象的方法
System.out.println(proxyCglib.getClass());
System.out.println(proxyCglib.getDuty());
System.out.println(proxyCglib.getDuty());
}
}