C++ デザイン パターンにおけるプロキシ モードの簡単な紹介

黄舟
リリース: 2017-01-18 15:01:09
オリジナル
1185 人が閲覧しました

プロキシ モード (プロキシ): このオブジェクト (プロキシ、つまり個人) へのアクセスを制御するために他のオブジェクトにプロキシを提供します。

C# でメソッドを実装するには、インターフェイスを使用して必要なメソッドを定義する必要がありますが、C++ ではクラスをインターフェイスとして実装し、必要なメソッドを定義する必要があります。この場合、私は特定のアクティビティに参加する必要はありませんが、エージェントが参加します。依頼者(第三者)も私を知りませんので、代理人としての役割を果たします。

上記は、クラスを使用して必要なプロキシ メソッドをカプセル化することを意味します。

プロキシ モードのアプリケーション:

リモート作成、つまり、異なるアドレス空間にあるオブジェクトのローカル表現を提供します。これにより、オブジェクトが別のアドレス空間に存在するという事実が隠蔽されます。 【DP】

仮想エージェントは、必要に応じて作成するための高価なオブジェクトです。これは、インスタンス化に時間がかかる実際のオブジェクトを保存するために使用されます。たとえば、大きな HTML Web ページを開くと、表示される画像はダウンロード後にのみ表示され、開かれていない画像ボックスには仮想プロキシ経由でアクセスされます。本当の写真。この時点で、エージェントは実際のイメージのパスと寸法を保存します。

セキュリティ プロキシは、実際のオブジェクトにアクセスする際の権限を制御するために使用されます [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 中国語 Web サイト (www .php.cn) にアクセスしてください。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!