これはグラフィックスの問題よりも設計上の問題ですが、ここでは少し背景があります:OpenGLを使ってJavaでJOGLを使ってメッシュを読み込むプログラムを書いています.objファイルから取得してレンダリングします。これまでのところ問題はありませんが、一連のフィルターや変換をメッシュに適用できる必要があります。異なるパラメータを持つメソッドのインタフェースを設計する
- 騒々しいメッシュ
- 又は平滑メッシュとの両方に基づいてもしなくてもよいメッシュ(着色にスムージングアルゴリズムを適用する頂点
- にランダムノイズを加える面
- テッセレーションオリジナルクリーンメッシュ)
これらのフィルタのいくつかは、順番に適用されます。私はまた、他の人が(おそらく一般的な)独自のフィルターを書くために、一種の一貫したインターフェースを提供したいと思っています。私はこれについてどうやって行くのですか?
主な問題は、フィルタが異なるパラメータセットを必要とすることです。 1つのスムージングアルゴリズムでは、ユーザーが(実行時にGUIを使用して)2つのパラメータを選択する必要がありますが、別のパラメータを必要としない場合もあります。同様に、いくつかのカラーリングアルゴリズムでは平滑化メッシュとRGBカラーのみが必要な場合があり、別のカラーリングアルゴリズムでは平滑化メッシュとクリーンメッシュの両方が必要になることがあります。だから、呼び出しは次のようになります。
mesh = smoothingFilter1.filter(mesh, booleanParam);
が、それは完全に異なる場合があります:
mesh = smoothingFilter2.filter(mesh, intParam1, intParam2, floatParam);
明らかに私のコードは、一般的なフィルタリング方法を呼び出すことが可能である必要があります。何らかの種類の制御クラスでそれ自体(および必須のパラメータ)を登録する実装されていないメソッドを持つFilter
の抽象クラスまたはインターフェイスを定義することは良い考えですか?かなり複雑に思えますが、プログラムに任意の署名を持つフィルターメソッドを使用させる他の方法は考えられません。私はこの考えがうまくいくかどうかもわかりません...
このような状況を処理するためのデザインパターンはありますか?
おかげ
ロッサム:
各フィルタ方法は、そのパラメータの種類を確認する必要があります –