問題タブ [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.
c++ - C++11 での再帰的プロキシ パターンの実装
以下を可能にするFoo
オブジェクトがあるとします。
これには、プロキシの設計パターンが必要です ( Scott Meyers による詳細はこちら) 。
しかしここで、everymyFoo[i]
もFoo
インスタンスであるとしましょう。
私は実装に近づいていますが、最後の厄介な「前方宣言/不完全型」エラーを取り除くことはできません。
まず、簡単なものから始めましょう。
基本的な非再帰プロキシ パターンは次のとおりです。
その最後のハンドラーが必要かどうかわかりません。
とにかく、再帰的にするには、次のものが必要です。
Proxy
これは、内で定義できなくなったことを意味しますObject
。そうしないと、「不完全な型をベースにしようとしています」というコンパイラ エラーが発生します。
では、そうしましょう。また、可能な場合はコンストラクターを変更して基本クラスを埋める必要があります。
そして、Object
基本クラスにより、typecast-to-object を手動で処理する必要がなくなります。
しかし、これはそれが危険になるところです。
Object::Proxy
の定義を (実際には後) の外に移動するObject
と、元の
... 不完全なクラス ( Proxy
) を使用しているため、エラーが発生します。単に定義を外側に移動しても、戻り値の型が であるという事実は修正されないことに注意してくださいProxy
。それができればProxy*
。しかし、Proxy
できません。
これは Catch-22 のように見えますが、明確な解決策は見当たりません。
ありますか?
編集: 欠陥のある設計を示唆するコメントに応じてObject
、ポインターの軽量ラッパーであることに注意してください。PyObject*
データ メンバーは 1 つだけです。
編集:私が取り組んでいる元のコードはここにあります
c++ - オーバーロード -> プロキシ経由でメンバー アクセスを転送する演算子
PyObject*
PythonをObject
クラスにラップしようとしています。Python では、すべてがPyObject*
. リストは でありPyObject*
、リスト内の各項目自体がPyObject*
です。これは別のリストになる可能性さえあります。等
fooList[42] = barObj
Proxy パターン ( here ) を使用してスタイル構文を許可しようとしています。
fooList[42]
これで機能するようになったので、拡張してとして使用できるようにしたいと思いObject
ます。具体的には対応できるようになりたい...
Object
には多くのメソッドがあり、現在、最初に をインスタンスにfooList[42].myObjMethod()
解決fooList[42]
し、次に を試みます。Proxy
tmpProxy
tmpProxy.myObjMethod()
これは、私がしなければならないことを意味します
Object
つまり、の各メソッドを を介して手動でリレーしますがProxy
、これは見苦しいものです。
完璧な解決策はありませんが(上記のリンクされた回答を参照)、喜んで使用します:
... 妥協案として、-> をオーバーロードできる(オーバーロードできないのとは対照的に)と見なし.
ます。
ただし、オーバーロードに関するドキュメントが見つかりませんoperator->
。
私の最善の推測は、何らかのオブジェクトへのポインターを返す必要があり (たとえばpObj
)、C++ が を呼び出すことpObj->whatever
です。
以下は私の試みた実装です。ただし、「オブジェクト型の一時オブジェクトのアドレスを取得しています」という警告が表示されます。
私はObject
クラス内に持っています:
「const Object&」は、「オブジェクト型の一時オブジェクトのアドレスを取得する」という警告に遭遇することに注意してください。
アイデアは、myList[5]->someMemberObj = ...
スタイル構文を許可することです。
myList[5]
( の 6 番目の要素)Proxy
をラップするインスタンスとして解決されます。と呼びましょう。Object
myList
myItem
今、私は、またはsomeProxy->fooFunc()
それぞれsomeProxy->fooProperty
を呼び出したいです。myItem.fooFunc()
myItem.fooProperty
「オブジェクト型の一時オブジェクトのアドレスを取得しています」という警告が表示されます。
java - Java フォールバック パターン
サードパーティのライブラリ クラスに依存するサービスを実装する良い方法を見つけようとしています。また、ライブラリが利用できない場合や回答を提供できない場合に備えて、フォールバックとして使用する「デフォルト」の実装もあります。
サービスの実際の実装は次のようになります。
現在の実装は、サービスへの実際の呼び出しのみが異なるという点で少し重複しているように見えますが、try/catch とデフォルトのメカニズムはほとんど同じです。また、サービスに別のメソッドが追加された場合、実装はほとんど同じになります。
コードの見栄えを良くし、追加のコピーと貼り付けを少なくするために、ここ ( proxy、strategy ) に適用できる設計パターンはありますか?
c++ - プラグイン システムで API を正しく公開する方法は?
以下のクラス ダイアグラムでは、プラグイン/拡張システムの現在のアプローチを確認できます。拡張機能に、一般的/グローバルな API を提供したいと考えています。ただし、公開される API は、参照されるオブジェクトの実際の機能のサブセットのみで構成される必要があります。私の最初の考えは、インターフェイスを使用することでした。これに関する問題は、悪質なプラグインがインターフェースを内部クラスにダウンキャストして混乱させる可能性があることです。(私も気にする必要がありますか?) 2 番目の考えは、プロキシ パターンを使用することでした。現在、私はそれらの両方を使用しています。これは本当に必要ではないと思います。しかし、バイナリ互換性を念頭に置いて、ここで複雑さを軽減するにはどうすればよいでしょうか?
ios - Swift のプロキシ オブジェクト
NSObject から継承されたカスタム オブジェクトの構成オブジェクトを作成するために、Swift でプロキシ パターンを実装しようとしています。UIView の UIAppearance のようなものになります。forwardInvocation:
しかし、メソッドとNSInvocationクラスを使用して object -c で行うメソッド呼び出し転送の方法がわかりません。
誰かがそのような問題に直面し、解決策を持っているなら、私は聞いて感謝します. 前もって感謝します。