Latest web development tutorials

프록시 모드

프록시 모드 (프록시 패턴)에서, 다른 클래스를 대신 함수의 클래스입니다. 디자인 패턴이 유형의 구조 모델에 속한다.

프록시 모드에서는, 외부에 기능적 인터페이스를 제공하기 위해 기존의 개체 개체를 생성한다.

소개

의도 : 다른 목적이 객체에 대한 액세스를 제어하는 에이전트를 제공하는 것이다.

주요 해결 방법 : 원격 시스템에 액세스 할 개체 : 개체에 직접 액세스는 다음과 같은 문제를 일으켰습니다.객체 지향 시스템에서, 어떤 이유로 일부 개체 (예 : 개체 생성과 같은 비싼, 또는 특정 작업은 보안 통제 프로세스 외부, 또는 액세스를 필요로)는 사용자에게 시스템 구성이나 많은 문제에 직접 액세스를 제공합니다, 우리는이 개체에 대한 액세스시에이 개체에 액세스 할 수있는 레이어를 추가 할 수 있습니다.

때 사용하는 : 당신이 클래스에 대한 액세스를 제어 할 뭔가를 할 때.

해결 방법 : 중간층을 추가합니다.

키 코드 : 프록시 클래스의 조합으로 링크.

적용 예 : 1, 윈도우 안에 바로 가기.2, 돼지 높은 Cuilan 결과 원숭이 변화에 갔다, 이해 될 수있다 : 높은 Cuilan 모양 추상화, 높은 터키석 블루 I, 원숭이는 원숭이 왕은 높은 Cuilan가되도록, 원숭이 왕 볼이 인터페이스, 돼지 접근 높은 Cuilan를 구현 프록시 클래스입니다. 3, 반드시 당신은 또한 콘센트에 갈 수 있습니다, 구입하는 역에서 열차 표를 구입합니다. 4, 수표 또는 예금 은행 인증서는 프록시 계정 자금이다. 시장에서 확인 거래는 현금 대신 사용하고, 발행자의 자본 계정 컨트롤을 제공합니다. 5, 스프링 AOP.

장점 : 1, 명확한 책임.2, 높은 확장 성을 제공합니다. 3, 지능형.

단점 : 1 클라이언트와 프록시 객체 그 실제 주제이므로 프록시 모드의 일부 유형과 같은 느린 처리 속도가 요구 될 수있다.도 2는 프록시 모드를 달성하는 것은 일부 프록시 모드가 매우 복잡 달성하는 추가 작업을 필요로한다.

사용 시나리오 : 1, 원격 에이전트 : 책임을 분할에있어서, 일반적으로 다음과 같은 사용 시나리오가 있습니다.2. 경고. 3, 복사 -에 - 쓰기 에이전트. (4), 보호 (보호 또는 Access) 에이전트. 5, 캐시 에이전트. 6, 방화벽 (방화벽) 에이전트. (7), 동기화 (동기화) 에이전트. 8, 지능형 참조 (스마트 참조) 에이전트.

주 : (1)와 어댑터 모드의차이 : 어댑터 패턴 큰 변화가 오브젝트의 인터페이스를 고려하고, 프록시 모드 클래스 인터페이스 에이전트에 의해 변경 될 수 없다. 2 장식 패턴의 차이 : 데코레이터 기능을 강화하고, 프록시 모드를 제어한다.

실현

우리는 엔티티 클래스이미지 인터페이스의이미지 인터페이스와 구현을 작성합니다.ProxyImage 메모리공간RealImage로드개체 감소 프록시 클래스이다.

ProxyPatternDemo,우리는로드 요구에표시되는 화상 오브젝트를얻을ProxyImage 클래스의사용을 입증한다.

프록시 패턴 UML 다이어그램

1 단계

인터페이스를 만듭니다.

Image.java

공용 인터페이스 이미지 {
   무효 표시 ();
}

2 단계

인터페이스를 구현 엔티티 클래스를 만듭니다.

RealImage.java

공용 클래스 RealImage는 이미지 {구현

   개인 문자열 파일 이름;

   공공 RealImage (문자열 파일 이름) {
      this.fileName 파일 이름 =;
      loadFromDisk (파일 이름);
   }

   @Override
   공공 무효 표시 () {
      에서 System.out.println (+ 파일 이름을 "표시");
   }

   개인 무효의 loadFromDisk (문자열 파일 이름) {
      에서 System.out.println ( "로드"+ fileName에);
   }
}

ProxyImage.java

공용 클래스 ProxyImage는 이미지 {구현

   개인 RealImage realImage;
   개인 문자열 파일 이름;

   공공 ProxyImage (문자열 파일 이름) {
      this.fileName 파일 이름 =;
   }

   @Override
   공공 무효 표시 () {
      경우 (realImage == NULL) {
         realImage = 새로운 RealImage (파일 이름);
      }
      realImage.display ();
   }
}

3 단계

요청시,RealImage클래스 객체를 얻을 수ProxyImage를 사용합니다.

ProxyPatternDemo.java

공용 클래스 ProxyPatternDemo {
	
   공공 정적 무효 메인 (문자열 []에 args) {
      이미지 이미지 = 새로운 ProxyImage ( "test_10mb.jpg");

      //) (디스크 image.display에서 이미지를로드; 
      에서 System.out.println ( "");
      // 이미지가) (디스크 image.display에서로드 할 수 없습니다; 	
   }
}

4 단계

출력을 확인합니다.

로드 test_10mb.jpg
표시 test_10mb.jpg

표시 test_10mb.jpg