Java 레코드-90 - 정적 프록시 모드 심도 분석

프록시 모드
프록시 모드의 역할은 다른 대상에게 프록시를 제공하여 이 대상에 대한 접근을 제어하는 것이다.
어떤 상황에서 한 고객이 다른 대상을 원하지 않거나 직접 인용할 수 없으며 대리지하는 클라이언트와 목표 대상 사이에 중개 역할을 할 수 있다.
프록시 모델은 일반적으로 세 가지 역할과 관련된다.
1. 추상적인 역할: 실제 대상과 대리 대상의 공동 인터페이스를 성명한다.
2. 프록시 역할: 프록시 대상 역할 내부에 실제 대상에 대한 인용이 포함되어 있어 실제 대상을 조작할 수 있다. 또한 프록시 대상은 실제 대상과 같은 인터페이스를 제공하여 언제든지 실제 대상을 대체할 수 있도록 한다.또한 대리 대상은 실제 대상 조작을 수행할 때 다른 조작을 추가할 수 있어 실제 대상을 봉인하는 것과 같다.
3. 실제 역할: 대리 역할이 대표하는 실제 대상은 우리가 최종적으로 인용할 대상이다.
정적 프록시 모드의 코드 구현:
public abstract class Subject {

    public abstract void request();
}
public class RealSubject extends Subject{

    @Override
    public void request() {
        System.out.println("from real subject");
    }
}
public class ProxySubject extends Subject{

    private RealSubject realSubject; //             
    
    @Override
    public void request() {
        preRequest(); //               
        
        if(null == realSubject){
            realSubject  = new RealSubject();
        }
        realSubject.request(); //         
        
        postRequest(); //               
    }
    private void preRequest(){
        System.out.println("pre request");
    }
    private void postRequest(){
        System.out.println("post request");
    }
}
public class Client {

    public static void main(String[] args){
        Subject subject = new ProxySubject();
        subject.request();
    }
}

위 코드를 통해 알 수 있듯이 고객이 실제적으로 필요로 하는 것은 RealSubject 클래스의 Request () 방법입니다. 현재는 ProxySubject로 RealSubject 클래스를 대리하고 같은 목적을 달성하는 동시에 다른 방법(preRequest (),postRequest () 을 봉하여 다른 문제를 처리할 수 있습니다.
상술한 방법에 따라 에이전트 모델을 사용하려면 실제 역할은 사전에 존재하고 이를 에이전트 대상의 내부 속성으로 해야 한다.그러나 실제적으로 사용할 때 하나의 실제 역할은 반드시 하나의 대리 역할에 대응해야 한다. 만약에 대량으로 사용하면 유형의 급격한 팽창을 초래할 수 있다.그리고 실제 캐릭터를 미리 모르면 대리인을 어떻게 사용해야 하나요?이 문제는 자바의 동적 프록시 클래스를 통해 해결할 수 있습니다.

좋은 웹페이지 즐겨찾기