問題タブ [proxy-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1917 参照

dependency-injection - Java EE プロキシ パターン

依存関係を Bean に注入するように要求すると、そのリソースのインスタンスへのプロキシが注入されることをどこでも読んでいます。プロキシとは何か、メッセージを別のインスタンスに転送する方法を知っているインスタンスであることを知っていると思います。また、コンテナーがこのマネージド Bean にサービスを提供できるのは、このパターンであるとも述べられています。

これはよくわかりません。なぜプロキシが必要なのですか? そして、これはどのように実装されていますか?各 Bean にプロキシ オブジェクトはありますか? または、1 つのインスタンスに転送するプロキシが多数ありますか? それともどちらでもない?

また、GoF の本のデザイン パターンから、プレースホルダーとして機能するプロキシ クラスを提供する必要があることを読みました。しかし、Java EE では決してそれを行いません。アプリケーション サーバーは実行時にプロキシ クラスを作成しますか?

0 投票する
2 に答える
367 参照

c++ - プロキシ設計パターンを使用したプリプロセッサ

プロキシ セクションで、ギャング オブ フォーのデザイン パターンは次のように述べています。

メンバー アクセス演算子をオーバーロードすることは、すべての種類のプロキシにとって適切な解決策ではありません。一部のプロキシは、どの操作が呼び出されたかを正確に知る必要があり、そのような場合、メンバー アクセス演算子のオーバーロードは機能しません。

[...]

その場合、リクエストをサブジェクトに転送する各プロキシ操作を手動で実装する必要があります。

[...]

通常、すべての操作は、リクエストをサブジェクトに転送する前に、リクエストが正当であること、元のオブジェクトが存在することなどを確認します。このコードを何度も書くのは面倒です。そのため、プリプロセッサを使用して自動的に生成するのが一般的です。

OK、C++ ではどのプリプロセッサとどのように?

0 投票する
3 に答える
813 参照

java - プロキシ パターンが非常に遅いのはなぜですか?

少なくとも Java では、プロキシ パターンには多くのオーバーヘッドがあります。正確な数値は覚えていませんが、小さなメソッドをラップする場合、プロキシはラップされたメソッドの 50 倍程度の時間がかかります。これが、たとえばjava.awt.image.BufferedImage.setRGB&getRGB本当に遅い理由です。実際の をラップする約 3 つのプロキシがありますbyte[]

なぜ50回?! プロキシが時間を 2 倍にしないのはなぜですか?


編集:=(

SO ではいつものように、私の質問が間違っているという回答がたくさんありました。そうではありません。これらのマイクロベンチマークではなく、BufferedImage、またはその他の実際のプロキシ パターンを確認してください。実際、BufferedImage の多くのピクセル操作を行う必要があり、その構造を知っている場合は、プロキシを手動で元に戻すことで、前述の大幅な高速化を実現できます。この回答を参照してください。

ああ、これが 50xのソースです。記事で詳しく説明されているように、ラップに時間がかかる場合、プロキシには顕著なペナルティはありませんが、小さなメソッドをラップしている場合は、大きなオーバーヘッドが発生します。

0 投票する
4 に答える
368 参照

c++ - カスタマイズ可能な文字列フィルターの設計

に大量のファイル名がありmy_dir/my_subdir、何らかの方法でフォーマットされているとします。

たとえばdata11_7TeV、実行番号、data_typeデータ形式です。00179691NTUP_PHOTON

私はこのようなことをするためのインターフェースを書きたいです:

countたとえば、やのようなアクションの前に実際のフィルタリングを行う必要はありませんget_list。フィルタリングが既に行われている場合、フィルタリングをやり直したくありません。私はちょうどデザインパターンについて何かを学んでいて、私が使うことができると思います:

  • メソッドAbstractFilterを実装する抽象基本クラスfilter*
  • 呼び出されたメソッドからデコレータが使用するものを決定するファクトリ
  • filter* メソッドを呼び出すたびに、装飾されたクラスを返します。次に例を示します。


  • ファイル名をフィルタリングするために正規表現を構築するが、フィルタリングを行わないプロキシ

私はjQueryも学んでおり、同様の連鎖メカニズムを使用しています。

誰かが私にいくつかのヒントを教えてもらえますか? このようなデザインが説明されている場所はありますか?特にファイル名の新しい形式を処理するために、設計は非常に柔軟でなければなりません。

0 投票する
2 に答える
1328 参照

design-patterns - プロキシ パターンが構造パターンであり、状態パターンが行動パターンである理由は何ですか?

プロキシパターンが構造パターンであり、状態パターンが行動パターンである理由. 新しいパターンが構造的または行動的であると見なされるべきであると判断するための基準は何ですか?

0 投票する
3 に答える
317 参照

java - このパターンの名前は何ですか? (回答: リモート プロキシ)

OriginalClass実行時に使用できる場合とできない場合があるクラスを考えてみましょう。クラスが利用可能な場合に実行する必要がOriginalClassあるメソッドがあります。doSomething

これを解決する方法は、 using リフレクションdoSomethingを呼び出すメソッドも持つクラスを作成することです。OriginalClass.doSomethingこのようなもの:

ここで適用されたデザイン パターンの名前は何ですか? AdapterBridgeFacade、またはProxyのいずれかだと思いますが、どれかわかりません。

0 投票する
3 に答える
6213 参照

design-patterns - プロキシ パターンと仮想プロキシ パターンの違い

私はこれまでプロキシ パターンを知っていましたが、最近この記事を読んで、仮想プロキシは基本的にメモリ集約型コンポーネントのオブジェクト作成プロセスを延期するために使用され、それによってアプリケーションを高速化すると述べています。

しかし、その記事を読んだ後では、プロキシ パターンと仮想プロキシ パターンは同じもののように見えます。私は正しいですか、それとも私はこれを間違って理解しましたか?

0 投票する
1 に答える
528 参照

java - 非同期呼び出しを含むプロキシ パターンを実装するには?

非同期呼び出しを含むプロキシ パターンを実装するには?

たとえば、何かを取得したい場合は、まずオブジェクトがメモリに存在するかどうかを確認し、存在しない場合は、それを取得するために http 要求を行います (これは非同期呼び出しです)。

および CustomerDAO.getCustomerByName("John"); の内部。

ただし、非同期であるため、プログラムの流れが中断されます。また、getCustomers のローカル変数もコールバック関数に渡す必要があります。Asyncでプロキシパターンを実装する提案はありますか? ありがとう。

0 投票する
1 に答える
450 参照

c++ - C++ のプロキシ パターンの仮想関数

プロキシ パターン Class がAあり、そのプロキシは ClassPrxAです。質問1

virtualのようにいくつかの関数を定義した場合、それらは偶数のAように定義されるはずですか?virtualPrxA

今なら

プロキシ クラスも継承する必要があると思います。

これらのプロキシクラスには次のルールがあると仮定します

  1. c'tor で元のクラスをインスタンス化する
  2. 異なる内部クラス間で渡される参照/ポインタ パラメータに対して内部的に渡されます。
  3. プロキシ クラスの実際の impl を取得するには (つまり、 from から取得Aするには、 fromとfromPrxAを提供する impl ストアを用意します。APrxABPrxB

Cこれで、PrxA を c'tor の参照として受け取るクラスができました。

`C::C(PrxA& A): pa(A),a(getImpl(PrxA))

初期化中のクラス C のローカル メンバー。

A を渡すとうまくいきます。ここでは問題ありません。

質問 2Bこのクラスに渡すとき、の impl (C の c'tor で初期化された 2 番目)を取得Cする最良の方法は何ですか?BBA

このようなものにキャストすることを考えることができますがgetImpl(A)、良いソルンのようには見えません.

PrxA を参照として取っているPrxBようなクラスに渡す必要がある場合、ここでどのようなアプローチを取る必要がありますか? Cキャスティング以外のアプローチはありますか?

ここでまた興味深いのは、コンストラクターを 1 つに制限すると、イニシャライザーで impl を取得するためにそれに応じて処理する必要がある PrxA または PrxB の参照を取得できることです。私は良いアプローチを知る必要があります。

0 投票する
2 に答える
422 参照

python - OOP と Proxy パターンを使用した文字列の構築

SQLAlchemy がクエリ文字列を構築する方法は非常に興味深いと思います。

私が見る限り、ある種のProxy Patternが適用されています。私の小さなプロジェクトでは、OOP アプローチを使用して同様の文字列を作成する必要があります。そこで、この動作を再構成しようとしました。

最初に、いくつかの種類のオブジェクト、多くの同様のオブジェクトの 1 つ:

このオブジェクトのすべてのメソッドはselfを返すため、任意の順序で無制限に呼び出すことができます。

2 つ目は、オブジェクトを呼び出して結果の文字列を表示するperformメソッドでない場合にサブジェクトのメソッドを呼び出すプロキシ オブジェクトです。

そして最後に:

この実装について何が言えますか? このような文字列を同じ構文で構造化するのに望ましい量のクラスを作成するより良い方法はありますか?

PS: 私の英語で申し訳ありませんが、それは私の母国語ではありません.