C++ 디자인 패턴의 프록시 모드에 대한 간략한 소개

黄舟
풀어 주다: 2017-01-18 15:01:09
원래의
1185명이 탐색했습니다.

프록시 모드(Proxy): 다른 개체에 대한 프록시를 제공하여 이 개체(프록시, 즉 사람)에 대한 액세스를 제어합니다.

C#에서는 인터페이스를 사용하여 필요한 메소드를 정의해야 하고, C++에서는 클래스를 인터페이스로 구현하고 필요한 메소드를 정의해야 합니다. 이 경우 특정 활동에 내가 참여할 필요는 없지만 에이전트가 참여하게 됩니다. 의뢰인(제3자)도 나를 모르므로 대리인 역할을 합니다.

위의 의미는 클래스를 사용하여 필요한 프록시 메서드를 캡슐화한다는 의미입니다.

프록시 모드 적용:

원격 생성, 즉 서로 다른 주소 공간에 있는 개체에 대한 로컬 표현을 제공합니다. 이는 개체가 다른 주소 공간에 존재한다는 사실을 숨깁니다. 【DP】

가상 에이전트는 필요에 따라 생성하기에는 비용이 많이 드는 개체입니다. 예를 들어, 큰 HTML 웹 페이지를 열 때 우리가 보는 그림은 다운로드 후에만 볼 수 있고 열리지 않은 그림 상자는 가상 프록시를 통해 액세스됩니다. 실사. 이 시점에서 에이전트는 실제 이미지의 경로와 크기를 저장합니다.

보안 프록시는 실제 개체에 액세스할 때 권한을 제어하는 ​​데 사용됩니다[DP]. 일반적으로 개체에 다른 액세스 권한을 부여해야 하는 경우에 사용됩니다.

스마트 안내란 실제 객체가 호출되면 에이전트가 다른 일을 처리한다는 것을 의미합니다[DP].

대행사 휴대폰 패키지를 예로 들어보겠습니다.

테스트 케이스:

[code]int main(){//整个过程中,本人都没有出现
    std::string name = "Jarrett";
    //第三方公司
    Company cp(name);  //申请人(本人)的名字告诉公司

    //代理人
    Proxy *px = new Proxy(cp);

    //办理58元套餐
    px->A58();
    //办理88元套餐
    px->A88();
    //办理128元套餐
    px->A128();

    return 0;
}
로그인 후 복사

프록시 클래스 구현 방법:

[code]//主体,提供接口。无需实例化,定义为纯虚函数
class Subject{
public:
    virtual void A58()const = 0;
    virtual void A88()const = 0;
    virtual void A128()const = 0;
};

//第三方公司
class Company{   
public:
    std::string name; //公司要知道办理套餐本人的名字
    Company(std::string na):name(na){}  
};

//本人(被代理人)
class oneSelf: public Subject{
private:
    Company cp; //本人要知道自己对谁做什么,此处自己知道要对哪个公司办理套餐
public:
    oneSelf(Company c):cp(c){} //此处由代理类来初始化

    void A58()const override{
        std::cout << cp.name << " for 58 packages.\n"; //告诉移动公司,我要办58套餐
    }

    void A88()const override{
        std::cout << cp.name << " for 88 packages.\n";
    }

    void A128()const override{
        std::cout << cp.name << " for 128 packages.\n";
    }
};

class Proxy:public Subject{
private:
    //代理谁?
    oneSelf os;
public:
    Proxy(Company cp):os(oneSelf(cp)){}  //此处初始化本人的构造函数,达到了代理的目的
    void A58()const override{
        os.A58();
    }

    void A88()const override{
        os.A88();
    }

    void A128()const override{
        os.A128();
    }

};
로그인 후 복사

위는 대행사에 대한 간략한 소개입니다. C++ 디자인 패턴 프록시 모드의 내용에 대해 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)에 주목하세요!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!