C++디자인 모드 의 프 록 시 모드(Proxy)

대리 모델 은 프로그램 디자인 의 가장 중요 한 모델 로 구체 적 인 사용 이 매우 광범 위 하 다.그의 역할 에 따라 우 리 는 중간 부품 이나 중간 층 으로 직접 이해 할 수 있다.예 를 들 어 각종 소프트웨어 의 중간 부품,소프트웨어 와 하드웨어 중의 중간 층 이다.
역할.
이 대상 에 대한 접근 을 제어 하기 위해 다른 대상 에 게 에이 전 트 를 제공 합 니 다.이렇게 업무 와 핵심 기능 의 분 리 를 실현 하 였 다.
추상 클래스 보기

분류 하 다.
4.567917.가상 에이전트:필요 에 따라 비용 이 많이 드 는 대상 을 만 들 고 이 를 통 해 실례 화 를 저장 하 는 데 오 랜 시간 이 걸 리 는 실제 대상 으로 진정 으로 필요 할 때 만 만들어 집 니 다4.567917.원 격 에이전트:한 대상 이 서로 다른 주소 공간 에 국부 대 표를 제공 하면 한 대상 이 서로 다른 주소 공간 에 존재 한 다 는 사실 을 숨 길 수 있 습 니 다.이 서로 다른 주소 공간 은 이 기계 에 있 을 수도 있 고 다른 기계 에 있 을 수도 있다4.567917.스마트 인용 대리:실제 대상 을 호출 할 때 대리 가 다른 일 을 처리 하 는 것 을 말한다.예 를 들 어 이 대상 의 호출 횟수 를 기록 하 는 등 이다4.567917.안전 에이전트:실제 대상 이 방문 할 때의 권한 을 제어 하 는 보호 에이전트 라 고도 합 니 다.필요 하 다 면 서로 다른 호출 자 에 게 서로 다른 권한 을 제공 할 수 있 습 니 다4.567917.작성 시 복사 에이전트:가상 에이전트 의 하나 로 복 사 를 고객 의 필요 로 할 때 만 진행 합 니 다4.567917.캐 시 에이전트:특정한 목표 의 작업 결과 에 임시 저장 공간 을 제공 하여 다른 고객 이 공유 하고 접근 할 수 있 도록 캐 시 냄새 가 납 니 다4.567917.방화벽 대리:보호 대상,사용자 가 방문 하지 못 하 게 하고 안전 대리 의 특례4.567917.동기 에이전트:몇 명의 사용자 가 같은 대상 을 동시에 방문 하여 충돌 하지 않도록 할 수 있 습 니 다.
분류 실현
가상 에이전트
가상 에이전트 의 주요 목적 은 지연 을 실현 하 는 것 입 니 다.여기 서[DP]라 는 책의 예 를 들 어 문서 에 도형 대상 을 삽입 할 수 있 는 문서 편집 기 를 고려 합 니 다.일부 도형 대상 의 생 성 비용 은 매우 크다.그러나 문 서 를 여 는 것 은 매우 빠 르 기 때문에 우 리 는 문 서 를 열 때 비용 이 많이 드 는 모든 대상 을 한꺼번에 만 드 는 것 을 피해 야 한다.문 서 를 열 때 도형 대상 을 열지 않 고 실제 도형 을 대체 하기 위해 프 록 시 모드 를 사용 할 수 있 습 니 다.진정 으로 그림 을 열 어야 할 때 까지 대리 가 열 어야 합 니 다.

//     
class Image 
{ 
public : 
  Image(std::string name) : m_name(name){ } 
  virtual ~Image( ){ } 
 
  virtual void Show( ) = 0;      //          
 
protected : 
  std::string m_name;       //     
}; 
 
//        
class BigImage : public Image 
{ 
public : 
  BigImage(std::string name) : Image(name){ } 
  virtual ~BigImage( ){ } 
 
  void Show( ) 
  { 
    std::cout <<"This is Big Image..." <<std::endl; 
  } 
}; 
 
//          
class BigImageProxy : public Image 
{ 
public : 
  BigImageProxy(std::string name) :Image(name), m_bigImage(NULL){ } 
  virtual ~BigImageProxy( ) 
  { 
    delete m_bigImage; 
  } 
 
  void Show( ) 
  { 
    if(this->m_bigImage == NULL) 
    { 
      m_bigImage = new BigImage(this->m_name); 
    } 
    m_bigImage->Show( ); 
  } 
 
private : 
  BigImage *m_bigImage; 
}; 

//        
int main( ) 
{ 
  Image *Image = new BigImageProxy("Image.txt"); 
  Image->Show( ); 
  delete Image; 
 
  return 0; 
}

원 격 에이전트
원 격 에이 전 트 는 주로 통신 에 나타난다.예 를 들 어 네트워크,IPC 와 RPC 에서 일반적으로 고객 보조 대상 과 서비스 보조 대상 을 제공 하고 고객 보조 대상 에 게 서비스 대상 과 같은 방법(예 를 들 어 JAVA 의 stub 와 skeleton)을 만 들 고 그 다음 에 실현 하 는 구체 적 인 통신 을 제공 해 야 한다.client 에 있어 stub(사실은 stub 와 skeleton 의 공동 작업)은 바로 원 격 에이전트 이다.

지능 참조 에이전트
가장 전형 적 인 응용 은 바로 스마트 지침 의 운용 이다.지침 에 비해 스마트 지침 은 지침 에 대한 대리 이다.이것 의 구체 적 인 실현 은 auto 를 참고 할 수 있 습 니 다.ptr 또는 shareptr 의 실현.
쓰기 시 복사 에이전트
쓸 때 복사 하 는 것 은 가상 에이전트 와 인용 계수 체 제 를 사용 하여 복사 동작 이 계수 에 변화 가 생 길 때 까지 지연 시 키 고 std:string 의 메모리 실현 과 같은 전형 적 인 활용 을 사용 합 니 다.구체 적 으로 구현 하면 string 의 원본 코드 를 볼 수 있 습 니 다.

std::string str1 = "fine"; 
std::string str2 = str1; //   str2 str1   data       ; 
str2[0] = 'w';  //   str2       


기타 에이전트
나머지 몇 가지 대 리 는 방문 대상 에 대한 통 제 를 통 해 구체 적 인 응용 을 실현 한다.복잡 한 응용 장면 과 서로 다른 언어 구조 와 관련 되 기 때문에 여기 서 더 이상 말 하지 않 고 주제 에서 멀 어 질 수 있다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기