자바 디자인 모드 - 프 록 시 모드 상세 설명
3811 단어 자바 디자인 모드
2. 정적 에이전트;
interface Network { // Network
public void browse(); //
}
class Real implements Network { //
public void browse() { //
System.out.println(" !");
}
}
class Proxy implements Network { //
private Network network;
public Proxy(Network network) {//
this.network = network; //
}
public void check() { //
System.out.println(" !");
}
public void browse() {
this.check(); //
this.network.browse(); //
}
}
public class ProxyDemo {
public static void main(String args[]) {
Network net = null; //
net = new Proxy(new Real()); // ,
net.browse(); //
}
}
3. 동적 에이전트, jdk 동적 에이전트, cglib 동적 에이전트 인터페이스 로 나 뉜 다.
public interface DAOInterface {
public void add();
public void delete();
public void update();
public void query();
}
묵인 실현
public class UserDao implements DAOInterface {
@Override
public void add() {
System.out.println(" add");
}
@Override
public void delete() {
System.out.println(" delete");
}
@Override
public void update() {
System.out.println(" update");
}
@Override
public void query() {
System.out.println(" query");
}
}
jdk 동적 에이전트
public class ProxyTest {
public static void main(String[] args){
final DAOInterface userDao = new UserDao();
DAOInterface proxy = (DAOInterface) Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces()
, new InvocationHandler() {
//
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(" :"+method.getName());
Object o = method.invoke(userDao, args);//
return o;
}
});
proxy.delete();
}
}
Cglib 동적 에이전트
public class CglibTest {
public static void main(String[] args){
final UserDao target = new UserDao();
Enhancer en = new Enhancer();
//
en.setSuperclass(target.getClass());
//
en.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
System.out.println(" "+arg1.getName());
Object obj = arg1.invoke(target, arg2);
return obj;
}
});
UserDao proxy = (UserDao) en.create();
proxy.add();
}
}
참고 자료:https://www.cnblogs.com/chentingk/p/6433372.html