[디자인 모델] 다른 사람 을 위해 웨딩드레스 - 대리 모델 을 만든다.
정의: 프 록 시 모드 (Proxy) 는 다른 대상 에 게 대역 이나 자리 표시 자 를 제공 하여 이 대상 에 대한 접근 을 제어 합 니 다. 쉽게 말 하면 한 대상 으로 다른 대상 을 대표 하 는 것 입 니 다.
역할: 이 대상 에 대한 접근 을 제어 하기 위해 다른 대상 에 게 에이 전 트 를 제공 합 니 다.어떤 경우 에 한 대상 이 다른 대상 을 원 하지 않 거나 직접 인용 할 수 없 으 며 대리 대상 은 클 라 이언 트 에 있 을 수 있 습 니 다.
목표 대상 과 중개 역할 을 하 다.
사상: 추가 적 인 처리 나 다른 조작 을 제공 하기 위해 실제 대상 과 호출 자 사이 에 대리 대상 을 삽입 합 니 다.이런 추가 작업 은 통상 적 으로 실제 대상 과 통신 을 해 야 한다.
원 격 (Remote) 에이전트: 서로 다른 주소 공간 에 있 는 대상 에 게 국 역 대표 대상 을 제공 합 니 다.이 서로 다른 주소 공간 은 이 기계 에 있 을 수도 있 지만 다른 기계 에 있 을 수도 있다.원 격 대 리 는 대사 (Ambassador) 라 고도 부른다.장점 은 시스템 이 네트워크 의 세부 사항 을 숨 길 수 있어 서 클 라 이언 트 가 네트워크 의 존 재 를 고려 할 필요 가 없다 는 것 이다.고객 은 대리 대상 이 원 격 이 아니 라 국 역 이 라 고 생각 할 수 있 고 대리 대상 은 대부분의 네트워크 통신 업 무 를 맡 았 다.고객 이 시간 을 소모 하 는 원 격 호출 을 시작 할 것 이라는 것 을 의식 하지 못 할 수도 있 기 때문에 고객 은 필요 한 사상 적 준비 가 없다.
가상 (Virtual) 에이전트 (그림 이 불 러 오 는 것 을 지연 시 키 는 예): 필요 에 따라 자원 소모 가 큰 대상 을 만 들 고 이 대상 을 필요 할 때 만 만 만 들 수 있 습 니 다.가상 프 록 시 모드 를 사용 하 는 장점 은 프 록 시 대상 이 필요 할 때 만 프 록 시 대상 을 불 러 올 수 있다 는 것 이다.에이 전 트 는 불 러 오 는 과정 에 필요 한 최 적 화 를 가 할 수 있다.한 모듈 의 로드 가 자원 을 매우 소모 하 는 상황 에서 가상 에이전트 의 장점 이 매우 뚜렷 하 다.
Copy - on - WRite 에이전트: 가상 에이전트 의 일종 입 니 다.복제 (복제) 를 클 라 이언 트 가 필요 로 할 때 만 진정 으로 행동 할 수 있 도록 미루다.
스마트 참조 (Smart Reference) 에이전트: 대상 이 인 용 될 때 이 대상 이 호출 된 횟수 를 기록 하 는 등 추가 적 인 작업 을 제공 합 니 다.
예시
묘사: 탁 가 이 는 다이 에 게 이 교 교 에 게 선물 을 주 고 이 교 교 를 추구한다.
1) 반찬 1 판 코드
단점: 탁 가 이 는 직접 선물 류 를 행사 해 제목 에 맞지 않 는 다.
#include <iostream>
class SchoolGirl //
{
public:
void SetName(std::string str)//
{
m_Name = str;
};
std::string GetName(void) //
{
return m_Name;
};
private:
std::string m_Name;
};
class Pursuit//
{
public:
Pursuit(SchoolGirl* mm)
{
m_mm = mm;
};
void GiveDolls()
{
std::cout << m_mm->GetName() << " " << std::endl;
};
void GiveFlower()
{
std::cout << m_mm->GetName() << " " << std::endl;
};
void GiveChocolate()
{
std::cout << m_mm->GetName() << " " << std::endl;
};
private:
SchoolGirl* m_mm;
};
int main()
{
SchoolGirl* jiaojiao = new SchoolGirl();//
jiaojiao->SetName(" ");
//
Pursuit* zhuojiayi = new Pursuit(jiaojiao);
zhuojiayi->GiveChocolate();
zhuojiayi->GiveDolls();
zhuojiayi->GiveFlower();
delete jiaojiao;
delete zhuojiayi;
return 0;
}
2) 반찬 대행 2 판
단점: 자신 이 직접 추구 하 라 는 것 도 아니 고 제목 에 맞지 않 는 다.
#include <iostream>
class SchoolGirl //
{
public:
void SetName(std::string str)//
{
m_Name = str;
};
std::string GetName(void) //
{
return m_Name;
};
private:
std::string m_Name;
};
class Proxy// ,
{
public:
Proxy(SchoolGirl* mm)
{
m_mm = mm;
};
void GiveDolls()
{
std::cout << m_mm->GetName() << " " << std::endl;
};
void GiveFlower()
{
std::cout << m_mm->GetName() << " " << std::endl;
};
void GiveChocolate()
{
std::cout << m_mm->GetName() << " " << std::endl;
};
private:
SchoolGirl* m_mm;
};
int main()
{
SchoolGirl* jiaojiao = new SchoolGirl();
jiaojiao->SetName(" ");
Proxy* daili = new Proxy(jiaojiao);
daili->GiveChocolate();
daili->GiveDolls();
daili->GiveFlower();
return 0;
}
3) 반찬 제3 판
개선: 인 터 페 이 스 를 추가 하여 한 대상 이 인 터 페 이 스 를 실현 하도록 하고 대리 가 인 터 페 이 스 를 활용 합 니 다.
실현: 대리 역시 인 터 페 이 스 를 실현 하고 대리 가 인 터 페 이 스 를 실현 할 때 실제 실현 자 를 호출 하 는 방법 이다.
#include <iostream>
class SchoolGirl //
{
public:
void SetName(std::string str)//
{
m_Name = str;
};
std::string GetName(void) //
{
return m_Name;
};
private:
std::string m_Name;
};
class GiveGift // ( )
{
virtual void GiveDolls(void) = 0;
virtual void GiveFlower(void) = 0;
virtual void GiveChocolate(void) = 0;
};
class Pursuit :public GiveGift//
{
public:
Pursuit(SchoolGirl* mm)
{
m_mm = mm;
};
void GiveDolls()
{
std::cout << m_mm->GetName() << " " << std::endl;
};
void GiveFlower()
{
std::cout << m_mm->GetName() << " " << std::endl;
};
void GiveChocolate()
{
std::cout << m_mm->GetName() << " " << std::endl;
};
private:
SchoolGirl* m_mm;
};
class Proxy :public GiveGift// ( , )
{
public:
Proxy(SchoolGirl* mm)
{
m_gg = new Pursuit(mm);
};
~Proxy()
{
if (m_gg != NULL)
{
delete m_gg;
m_gg = NULL;
}
};
void GiveDolls()
{
m_gg->GiveDolls();
};
void GiveFlower()
{
m_gg->GiveFlower();
};
void GiveChocolate()
{
m_gg->GiveChocolate();
};
private:
Pursuit* m_gg;
};
int main()
{
SchoolGirl* jiaojiao = new SchoolGirl();
jiaojiao->SetName(" ");
Proxy* daili = new Proxy(jiaojiao);
daili->GiveChocolate();
daili->GiveDolls();
daili->GiveFlower();
return 0;
}
3. 프 록 시 모드 의 고전 템 플 릿
class Subject
{
public:
virtual void Request(void) = 0;
};
class RealSubject : public Subject
{
public:
void Request(void)
{
std::cout << " " << std::endl;
};
};
class Proxy : public Subject
{
public:
Proxy()
:m_realSubject(NULL)
{
}
void Request(void)
{
if (m_realSubject == NULL)
{
m_realSubject = new RealSubject();
}
m_realSubject->Request();
};
private:
RealSubject* m_realSubject;
};
int main()
{
Proxy* daili = new Proxy();
daili->Request();
delete daili;
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.