JAVA 디자인 모드:프록시(Proxy)
2398 단어 java 디자인 모드
어떤 경우, 한 대상이 다른 대상을 원하지 않거나 직접 인용할 수 없으며, 대리 대상은 클라이언트와 목표 대상 사이에서 중개 역할을 할 수 있다.
대리 모델의 사상은 추가 처리나 다른 조작을 제공하기 위해 실제 대상과 호출자 사이에 대리 대상을 삽입하는 것이다.이러한 추가 작업은 일반적으로 실제 대상과 통신해야 한다.
필자는 에이전트 모델의 두 가지 핵심 내용을 정리했다. 첫째, 방문자가 방문 대상에 대한 직접적인 상호작용을 격리하고 방문 대상에 대한 모든 조작을 에이전트 대상을 통해 집행하는 것은 장식 모델과 외관 모델과 유사하다.다른 한편, 대리 대상은 피대리 대상의 업무 논리를 수정하여 일부 업무 논리를 증가하고 차단할 수 있다는 점은 장식과 외관 모델이 허용하지 않는 것이다.
프록시 모드에서 가장 많이 응용되는 장면은 업무 접근에 대한 전치와 후치 처리이다.노래를 부르는 예를 들면, 원래 한 가수가 노래를 부르는 대상이 있었는데, 지금은 가수가 무대에 올라 공연해야 하며, 노래 전후에 신문과 커튼콜을 하는 동작을 더해야 한다.가수가 매번 무대에 올라 공연하는 것이 아니기 때문에 노래의 유형을 직접 수정하고 커튼콜과 커튼콜을 하는 조작은 분명히 적합하지 않다. 여기서 대리 모드를 사용하여 이 문제를 해결한다.
interface Sing {
void sing();
}
class Fancy implements Sing {
@Override
void sing() {
System.out.println(" !");
}
}
public class FancyProxy implements Sing {
Sing singger;
public FancyProxy(Sing singger) {
this.singger = singger;
}
@Override
public void sing() {
//
baoMu();
//
singger.sing();
//
xieMu();
}
}
위의 방식은 무대에 올라 공연하는 문제를 잘 해결했지만 이런 해결 방법은 반드시 디자인 단계에서 완성해야 하기 때문에 매우 큰 한계를 가진다.JDK는 실행 시 객체에 대한 에이전트를 생성할 수 있는 동적 만들기 도구를 제공합니다. 위 코드와 달리 여기서 흔히 말하는 동적 에이전트입니다.
class DynamicProxy implements InvocationHandler {
private Object target;
public DynamicProxy(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("before calling " + method);
method.invoke(target, args);
System.out.println("after calling " + method);
return null;
}
static void main(String[] args) {
Fancy fancy = new Fancy(); //
InvocationHandler handler = new DynamicProxy(fancy); //
Class cls = fancy.getClass();
Sing sing = (Sing) Proxy.newProxyInstance(cls.getClassLoader(),
cls.getInterfaces(), handler);
sing.sing();
}
}
이런 방식을 통해 프록시된 대상(Fancy)은 실행할 때 동적으로 바꿀 수 있고, 제어가 필요한 인터페이스(Sing 인터페이스)는 실행할 때 바꿀 수 있으며, 제어 방식(Dynamic Proxy 클래스)도 동적으로 바꿀 수 있어 매우 유연한 동적 프록시 관계를 실현할 수 있다.
추가 JAVA 디자인 모드
더 많은 훌륭한 오리지널 글은 필자의 오리지널 블로그를 주목해 주십시오.
http://www.coolfancy.com
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
어댑터(클래스 어댑터, 객체 어댑터 모드)1: 클래스 어댑터 모드 만일 우리가 Person류가 있다면, 이 Person류에는 불고 당기는 방법이 있다.시스템 개발의 절반에 이르러 우리는 이 종류에 두 가지 방법을 더 첨가하여 연주, 당기기, 연주, 노래의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.