JAVA 디자인 모델의 프록시 모델[Proxy Pattern]

개술
대상에 에이전트를 제공하고 에이전트가 원래 대상에 대한 접근을 완료합니다.대리 모델은 일종의 대상 구조형 모델이다.
2. 적용 장면
특정한 대상에 직접 접근할 수 없거나 특정한 대상을 방문하는 데 어려움이 있을 때 하나의 에이전트 대상을 통해 간접적으로 접근할 수 있으며 클라이언트가 사용하는 투명성을 확보하기 위해 의뢰 대상과 에이전트 대상은 같은 인터페이스를 실현해야 한다.
3. UML 클래스
         
4. 참가자
1. 인터페이스 클래스: Subject
이것은 실제 방문자와 프록시 방문자의 공동 인터페이스를 설명하는데, 클라이언트는 일반적으로 인터페이스 역할에 대해 프로그래밍을 해야 한다.
2. 프록시 클래스: ProxySubject
진실(위탁) 대상(RealSubject)에 대한 인용을 포함하고 실현된 인터페이스 방법에서 인용 대상의 인터페이스 방법을 호출하여 집행함으로써 대리 역할을 한다.프록시 객체(ProxySubject)가 작동하는 것처럼 보이지만 실제 작업자는 위임 객체(RealSubject)입니다.
3. 위탁 클래스/실제 방문 클래스: RealSubject
이것은 에이전트 역할이 대표하는 진실한 대상을 정의하고 진실한 역할에서 진실한 업무 조작을 실현하며 클라이언트는 에이전트 역할을 통해 진실한 역할에서 정의한 조작을 간접적으로 호출할 수 있다.
5. 용례 학습
1. 인터페이스 클래스: Subject.java
/**
 *    
 * @author [email protected]
 *
 */
public interface Subject {

	public void visit();
}

2. 인터페이스 구현 클래스,
실제 방문 대상/위탁 대상:
RealSubject.java
/**
 *      ,      /    
 * @author [email protected]
 *
 */
public class RealSubject implements Subject {

	@Override
	public void visit() {
		System.out.println("I am 'RealSubject',I am the execution method");
	}
	
}

3. 인터페이스 구현 클래스, 프록시 대상:
ProxySubject.java
/**
 *      ,    
 * @author [email protected]
 *
 */
public class ProxySubject implements Subject {
	//             ,           
	private Subject realSubject;
	
	public ProxySubject(Subject subject){
		this.realSubject = subject;
	}

	@Override
	public void visit() {
		//                                   
		realSubject.visit();
	}
}

    4、
Client.java
/**
 *    
 * @author  [email protected]
 *
 */
public class Client {

	public static void main(String[] args) {
		Subject proxySubject = new ProxySubject(new RealSubject());
		proxySubject.visit();
	}

}

6. 기타/확장
프록시 클래스가 만들어진 시기에 따라 프록시 클래스는 두 가지로 나눌 수 있습니다.
1. 정적 에이전트: 프로그래머가 만들거나 특정한 도구가 자동으로 원본 코드를 생성하여 컴파일합니다.프로그램이 실행되기 전에 프록시 클래스의.class 파일이 이미 존재합니다.(위에서 예시한 것은 정적 대리 기술이다)
 
정적 에이전트의 우열 분석:
장점: 클라이언트가 인터페이스 프로그래밍을 하고 개폐 원칙에 부합되며 시스템이 좋은 유연성과 확장성을 가지도록 한다.
단점: 위 코드에서 우리는 모든 에이전트 클래스가 특정한 인터페이스를 실현했고 모든 에이전트 클래스는 특정한 인터페이스 아래의 실현 클래스만 에이전트로 할 수 있음을 알 수 있다.서로 다른 인터페이스 아래의 다른 실현 클래스라면 새로운 인터페이스 아래의 에이전트 클래스를 다시 정의해야 합니다.     
 
그러면 하나의 에이전트 클래스를 통해 서로 다른 인터페이스를 통해 클래스의 에이전트 조작을 실현할 수 있습니까?그러면 이때 반드시 동적 에이전트를 사용하여 완성해야 한다.
2. 동적 에이전트: 프로그램이 실행될 때 JAVA 반사 메커니즘을 이용하여 동적 에이전트 실례를 만든다.
[티저: 다이내믹 에이전트 기술에 대해 샤오리는 다음 편에서 자세히 소개할 예정입니다.]
—————————————————————————————————————
만약 문장 내용이 당신에게 도움이 된다면, 잊지 말고, 한 번 반박하고 지지해 주십시오.  
글의 내용에 대해 궁금한 점이 있거나 더 나은 견해가 있으면 댓글이나 메일로 연락 주세요.
[email protected] / [email protected]
전재가 필요하다면, 출처를 밝혀 주십시오, 감사합니다!!
—————————————————————————————————————

좋은 웹페이지 즐겨찾기