問題タブ [visitor-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.
design-patterns - 訪問者パターンと再帰
再帰シナリオで訪問者パターンを使用する利点はありますか? もしそうなら、プログラムでそれを示すことができますか?
java - Java での訪問者パターンの実装 - これはどのように見えますか?
さて、コードに直接ジャンプします。
ここに基本的な実装があります:
ここで空の実装を行った理由がわかります...ここでバリデーターを作成します..これは StoreValidator を拡張します
ここで、visitable は次のようになります。
Store オブジェクトのリストに対して次のようなコードを作成できます。
同様に、他のメソッド (visitCountry / visitSomethinElse) の実装を提供する ABCValidator があり、StoreValidator から拡張されます。accept メソッドを定義する別のタイプのオブジェクト (ストアではない) があります。
ここで問題が発生します... たとえば、StoreValidator とは異なる FileValidator が必要です。 Visitor インターフェイスであらゆる種類のメソッドを宣言することになります。あれは正しいですか?これがあなたのやり方ですか?
パターンが間違っているのか、それとも意味があるのか わかりません。あなたの考えを共有してください。
oop - 訪問者パターンの代替?
訪問者パターンに代わるものを探しています。重要でない詳細は飛ばして、パターンのいくつかの関連する側面に焦点を当ててみましょう。Shape の例を使用します (申し訳ありません!):
- IShape インターフェイスを実装するオブジェクトの階層があります
- Draw、WriteToXml など、階層内のすべてのオブジェクトに対して実行される多数のグローバル操作があります。
- すぐに飛び込んで、Draw() および WriteToXml() メソッドを IShape インターフェイスに追加したくなるかもしれません。これは必ずしも良いことではありません。すべてのシェイプに対して実行される新しい操作を追加する場合は常に、各 IShape 派生クラスを変更する必要があります。
- 各操作のビジター、つまり Draw ビジターまたは WirteToXml ビジターを実装すると、その操作のすべてのコードが 1 つのクラスにカプセル化されます。新しい操作を追加するには、すべてのタイプの IShape で操作を実行する新しいビジター クラスを作成します。
- 新しい IShape 派生クラスを追加する必要がある場合、基本的には 3 で行ったのと同じ問題があります。新しい IShape 派生型を処理するメソッドを追加するには、すべてのビジター クラスを変更する必要があります。
訪問者パターンについて読んだほとんどの場所では、ポイント 5 がパターンが機能するための主な基準であると述べており、私は完全に同意します。IShape 派生クラスの数が固定されている場合、これは非常に洗練されたアプローチになります。
したがって、問題は、新しい IShape 派生クラスが追加されたときです。各ビジター実装は、そのクラスを処理する新しいメソッドを追加する必要があります。これは、良くても不快であり、最悪の場合は不可能であり、このパターンが実際にはそのような変化に対処するように設計されていないことを示しています。
では、問題は、この状況を処理するための別のアプローチに出くわした人はいますか?
c++ - ブースト グラフ ライブラリと訪問者
私は債券グラフを操作するためのライブラリを作成しており、Boost Graph Library を使用してデータを保存しています。残念ながら、頂点をサブクラス化できないため、それを使用して適切なビジター パターンを実装する方法を理解できないようです。代わりに「プロパティ」に依存する必要があります。ライブラリで提供されているビジター フレームワークは、頂点がすべて同じタイプであるが、異なる情報を格納する特定のアルゴリズムを操作することに重点を置いているようです。私の問題では、頂点はさまざまなタイプであり、さまざまなタイプの情報を格納しています.いくつかの頂点は抵抗器であり、いくつかの頂点はコンデンサなどです。頂点そのもの?
これまでの私の唯一の考えは、グラフ情報を取得するために必要な元の頂点を指すオブジェクトの型を表す小さなクラスを作成することでした。ただし、これは非常に厄介で、操作するのが悪いようです。
oop - 条件に対する訪問者パターン?
ビジターパターンの使用シナリオではこれが見つからないようです(または、取得できない可能性があります)。また、階層的ではありません。
認証の例を使用してみましょう。UserAuthenticatorは、ユーザーから指定された資格情報を認証します。結果オブジェクトを返します。結果オブジェクトには、認証の結果が含まれます。認証は成功しました。ユーザー名が見つからなかったために成功しませんでした。不正な文字が使用されたために成功しませんでした。クライアントコードは、これを処理するために条件に頼ることがあります。擬似コードの場合:
ビジターパターンはここに収まりますか?:
次に、Authresultは、結果に応じてAuthVisitorのメソッドを呼び出します。
c# - ANTLR を使用して独自の C# コンパイラを構築する: Compilation Unit
ルート、クラス、メソッドなどを抽出するために、compile_unit_return タイプの x を使用して何ができますか? そのアダプタを抽出する必要がありますか? それ、どうやったら出来るの?Compilation_unit_return は私の CSParser でそのように定義されていることに注意してください (これは ANTLR によって自動的に生成されます):
ただし、取得しているツリーはオブジェクト型です。デバッガーを使用して実行したところ、BaseTree タイプであることがわかりました。しかし、BaseTree はインターフェースです。それが BaseTree とどのように関係しているかはわかりませんし、このツリーから詳細を抽出する方法もわかりません。
クラス、メソッド、変数などにアクセスするビジターを作成する必要があります。ParserRuleReturn クラスは RuleReturnScope から拡張され、開始オブジェクトと停止オブジェクトを持ちますが、それが何であるかはわかりません。
さらに、ANTLR が提供するこの TreeVisitor クラスがありますが、これは紛らわしく見えます。コンストラクターにパラメーターとしてアダプターを渡す必要があります (そうでない場合は、デフォルトの CommonTreeAdaptor を使用します)。これが、以前にアダプターを取得する方法について尋ねた理由です。そして他の問題も。API については、 http://www.antlr.org/api/CSharp/annotated.htmlを参照できます。
objective-c - Objective-Cカテゴリ==ビジターパターン?
Objective-Cのカテゴリはビジターデザインパターンの実装だと思いますか?
uniqueidentifier - 訪問者が一意であることを確認する方法
いくつかのオンライン コースを含む有料サイトがあるとします。また、1 人のユーザーがアクセス権を購入するだけでなく、そのユーザー名とパスワードをすべての友人に提供して、無料でコースを受講できるようにしたいと考えています。
これについてどう思いますか?
これまでに考えたこと:
- IP追跡
- 各エントリの SMS パスワード
- 各コースの最大ラン数
他の提案はありますか?
java - EclipseのASTVisitor
プロジェクトでASTVisitorを実行する方法を学んでいるので、そのための包括的なAPIを備えたEclipseを使い始めました。
パックされたサンプルプロジェクトを次のWebサイトからダウンロードしました: http ://www.eclipse.org/articles/article.php?file = Article-JavaCodeManipulation_AST / index.html
しかし、コードにはmain()メソッドがないことに気付きましたが、プログラムを実行することはできます。誰もが理由を知っていますか?[qn 1]
ただし、コードはコンパイルされすぎて機能しないようであり、基本的なことを行うための手順はあまり明確ではありません。
だから私もこれを見続けました: http ://www.vogella.de/articles/EclipsePreferences/article.html
execute(ExecutionEvent event)を呼び出すためのメインメソッドを作成する方法を知っている人はいますか?-サンプルコードスニペットを提供しますか?[qn2]ExecutionEventの使い方がわかりません...
「スレッド"main"java.lang.IllegalStateExceptionの例外:ワークスペースが閉じています。」が発生し続けました。実行イベントのパラメーターを削除したり(extends部分も削除する必要があります)、メインでコードの一部を使用したりしても。の「ResourcesPlugin」と関係があるようですIWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot()
。誰もが理由を知っていますか?[qn 3]