C++ デザイン パターン 構造プロキシ パターン


1. 概要
    プロキシパターンは、幅広い分類とさまざまな状況での応用が可能な構造パターンです。
その主なアイデアは、クライアントとアクセスされるオブジェクトの間にプロキシ オブジェクト (間接層) を導入することです。そのため、これまでクライアントが実際のオブジェクトにアクセスしていたのは、プロキシ オブジェクトを介してアクセスされるようになります。プロキシ オブジェクトはここで動作します仲介者または橋渡しとして。
プロキシ オブジェクトを導入する目的は主に、追加の機能と制約をクライアントに追加すること、またはクライアントの呼び出しの複雑な詳細を保護することです。

2. 基本概念と例
    プロキシ モードの本質は、プロキシ クラスを導入することによって、元のクラス (プロキシ クラス) に追加機能を追加することです。これらの追加機能は、いくつかの新しい機能、新しいサービス、またはいくつかの制約や制約を参照する場合があります
。等 ここで例を考えてみましょう。ブラウザを通じて Web サイトにアクセスする最も簡単な方法は、ブラウザに Web サイトのアドレスを入力して直接アクセスすることです。

class CWebAddr
{ public:     virtual void visit() = 0;     仮想 ~CWebAddr(){} };



class CWebAddr_Shopping : public CWebAddr
{ public:     virtual void visit()     {         //ショッピング Web サイトの複雑な通信ロジックにアクセスします         cout << "CWebAddr_Shopping ショッピング Web サイトにアクセスします" << endl;     } };






class CWebAddr_Video : public CWebAddr
{ public:     virtual void visit()     {         //ビデオ Web サイトにアクセスする複雑な通信ロジック         cout << "CWebAddr_Video ビデオ Web サイトにアクセス" << endl;     } };






//主関数数
int main()
{     CWebAddr *pShopping = new CWebAddr_Shopping();     pShopping->visit();     CWebAddr *pVideo = new CWebAddr_Video();     pVideo->visit();     pShopping を削除します。     pVideo を削除します。     0を返します。}


    


    


    

上記のコードの実行結果は問題ありません。説明は主に 1 つまたはいくつかの Web サイトに直接アクセスすることです。その後、これらの Web サイトへのアクセスを支援するプロキシ クラスを導入して、上記のコードを調整することもできます。 class CWebAddrProxy :
public
CWebAddr
{ public:     CWebAddrProxy(CWebAddr * pWebAddr) : m_webAddr(pWebAddr){} public:     virtual void visit()     {             m_webAddr->visit();     } private:     CWebAddr* m_webAddr;     };


    







//主関数数
int main()
{     CWebAddr *pShopping = new CWebAddr_Shopping();     CWebAddr *pVideo = new CWebAddr_Video();     CWebAddrProxy *pWebproxy1 = 新しい CWebAddrProxy(pShopping);     pWebproxy1->visit();     CWebAddrProxy *pWebproxy2 = 新しい CWebAddrProxy(pVideo);     pWebproxy2->visit();     pShopping を削除します。     pVideo を削除します。     pWebproxy1 を削除します。     pWebproxy2 を削除します。     0を返します。}


    


    


        




    

3. プロキシ モードの定義と役割の
    紹介 プロキシ モードの定義: このオブジェクトへのアクセスを制御するために、他のオブジェクトにプロキシを提供します。プロキシ モードは、プロキシ オブジェクトを作成することで実オブジェクトを表現し、クライアントによるプロキシ オブジェクトの操作は
実オブジェクトの操作と変わりません。もちろん、最も核心的で重要な機能は、最終的にはプロキシ オブジェクトが実際のオブジェクトを操作して完了する必要があります。
プロキシ パターン UML 図には 3 つの役割が関係しています:
(1) サブジェクト (抽象オブジェクト)。このクラスは、実際のテーマとプロキシ テーマの間の共通インターフェイスを定義するため、実際のテーマがある場所であればどこでもプロキシ テーマを使用できます。
(2) プロキシ(プロキシテーマ)。このクラスには実際のテーマへの参照が内部的に含まれているため、実際のテーマにアクセスできます。プロキシ テーマは通常、実際のテーマを
置き換えるために、実際のテーマと同じインターフェイスを提供します。同時に、リアルトピックへのアクセスを制限・制限したり、必要に応じてリアルトピックの作成・削除を制御したりすることも可能です。
(3) RealSubject(実サブジェクト)は代理サブジェクトが表す実オブジェクトを定義しており、実ビジネスは実サブジェクト内で実現され、クライアントは代理サブジェクトを介して間接的に実サブジェクト内のインタフェースにアクセスする

4. プロキシ モードの適用場面
    プロキシ モードの UML 図はシンプルであり、ソフトウェア設計に要約することも簡単で、間接層を追加して柔軟性を高め、制御を強化します。実際には、プロキシ パターンは
多くの場合に適用される可能性があり、その実装は非常に複雑になる場合があります。
1) リモート プロキシ
2) 仮想プロキシ
3) 保護プロキシ
4) キャッシュ/バッファリング プロキシ
5) スマート参照プロキシ
6) コピーオンライト最適化プロキシ

おすすめ

転載: blog.csdn.net/leiyang2014/article/details/132286711