책임 모드의 Proxy 모드

6219 단어 프록시 모드
1. 만약에 한 대상이 다른 대상을 대표하여 여러 가지 조작을 하기를 원한다면Proxy(에이전트) 모드를 사용할 수 있다.방법: 일반 에이전트, 동적 에이전트, 원격 에이전트 3.예(일반 에이전트)
// 
public interface Person {
    void doSomethings();
}
// 
public class Woman implements Person{

    @Override
    public void doSomethings() {
        // TODO Auto-generated method stub
        System.out.println("  woman do somethings");
    }

}
// 
public class Man implements Person{

    private Person person;
    public Man(Person person) {
        // TODO Auto-generated constructor stub
        this.person = person;
    }
    @Override
    public void doSomethings() {
        // TODO Auto-generated method stub
        System.out.println("  man do something");
        person.doSomethings();
    }

}
// 
public class Test {
    public static void main(String[] args){
        Man man = new Man(new Woman());
        man.doSomethings();  
    }
}
// 
  man do something
  woman do somethings

4. 예(동적 에이전트)
// 
public interface Animal {
    void run();
}
// dog 
public class Dog implements Animal{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("dog running");
    }

}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
// : 
public class DynamicProxy implements InvocationHandler{

    private Object obj;
    public DynamicProxy(Object obj) {
        // TODO Auto-generated constructor stub
        this.obj = obj;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // TODO Auto-generated method stub
        Object result = null;
        result = method.invoke(obj, args);
        return result;
    }

    public static Object Factory(Object obj){
        Class cls = obj.getClass();
        return Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), new DynamicProxy(obj));
    }
}
// 
public class Test {
    public static void main(String[] args){
        Person woman = (Person)DynamicProxy.Factory(new Woman());
        woman.doSomethings();

        Animal dog = (Animal)DynamicProxy.Factory(new Dog());
        dog.run();
    }
}
// 
  woman do somethings
dog running

5. 요약:Proxy(에이전트) 모델의 의도는 대상에게 에이전트나 점유율을 제공하여 대상에 대한 접근을 제어하는 데 있다.Java에서 동적 에이전트는 때때로 재사용 가능한 기능을 추가하는 메커니즘을 제공할 수 있습니다.만약에 어떤 대상의 클래스가 캡처할 인터페이스를 실현할 수 있다면 동적 에이전트를 사용하여 이 대상을 포장하고 자신의 처리 논리를 증가하여 포장된 대상 코드의 기능을 강화하거나 교체할 수 있다.6. 참조:http://www.open-open.com/home/space-24-do-blog-id-12.html

좋은 웹페이지 즐겨찾기