프록시 모드
프록시 모드 (프록시 패턴)에서, 다른 클래스를 대신 함수의 클래스입니다. 디자인 패턴이 유형의 구조 모델에 속한다.
프록시 모드에서는, 외부에 기능적 인터페이스를 제공하기 위해 기존의 개체 개체를 생성한다.
소개
의도 : 다른 목적이 객체에 대한 액세스를 제어하는 에이전트를 제공하는 것이다.
주요 해결 방법 : 원격 시스템에 액세스 할 개체 : 개체에 직접 액세스는 다음과 같은 문제를 일으켰습니다.객체 지향 시스템에서, 어떤 이유로 일부 개체 (예 : 개체 생성과 같은 비싼, 또는 특정 작업은 보안 통제 프로세스 외부, 또는 액세스를 필요로)는 사용자에게 시스템 구성이나 많은 문제에 직접 액세스를 제공합니다, 우리는이 개체에 대한 액세스시에이 개체에 액세스 할 수있는 레이어를 추가 할 수 있습니다.
때 사용하는 : 당신이 클래스에 대한 액세스를 제어 할 뭔가를 할 때.
해결 방법 : 중간층을 추가합니다.
키 코드 : 프록시 클래스의 조합으로 링크.
적용 예 : 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 클래스의사용을 입증한다.
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