2011-02-02 4 views
1

申し訳ありませんが、この質問が以前に尋ねられた、または答えられていたが、正しく作成する方法が不明で、プラグインタイプの構造を使用しているJavaプログラムで、適切なデザインパターンに関するフィードバックが必要

私は割り当てとしてJavaでPaintアプリケーションを構築しています。私はこれを "プラグイン"型アプローチを使って行うことに決めました。メインアプリケーションは機能性はほとんど提供しませんが、動的なクラスローディングを行い、さまざまなプラグインなどを登録します。基本的には、メインプログラムに何もハードコードせずに、さまざまなコンポーネントを追加することができます。サブパッケージ内のすべての異なるプラグインを見つけてロードするLoadComponents()メソッドが存在します。これは完全に機能します。

各コンポーネントは、コアアプリケーションのJFrameにUIエレメントを作成して登録し、独自のEventListenersを実装します。これまでのところ、すべてこれまで美しく動作しています。

ここに私の問題があります:実際のペイントを行うには、明らかにpaintComponent()メソッドを実装するCanvasとして使用するJPanelがあります。これはコアアプリケーションに含まれており、非常に貧弱な機能を提供します。異なるコンポーネントが追加されるにつれて、私は基本Canvasクラスにますます多くの機能を追加したいと思いますが、そうするための良い、きれいで効果的な方法を見つけることはできません。

私が考えることができるのは、その機能を継承するCanvasのサブクラスを作ることだけです。しかし、プラグインと機能が実行時に動的にロードされるような現行のアプローチを使用するには、setCanvas()メソッドなどを提供して、実際のUIでベースのCanvasクラス参照をオーバーライドする必要があります。私はあまり効果的ではないし、一般的なプラクティスでもありませ

また、複数のプラグインが基本Canvasクラスに機能を追加し、次にどちらを先に進めるべきかを考え出す問題があります。

この問題に関するご意見、ご提案、ご感想をお待ちしております。

答えて

1

「プラグイン」という用語は、あなたがやっていることとまったく同じではないか、このアプリケーションの最適な設計パスではないと思います。

私は、UIコンポーネントが各コマンドを描画(および再描画)する「キャンバス」に「コマンド」を送信するコマンドパターンを、おそらくあなたが望むものと信じています。したがって、各ペイントUIアイテムはコマンドを作成することができなければならないが、「Canvas」はそれがどこから来たのかを知る必要はない。

+1

このパターンは、元に戻す機能を実装するために最後のコマンドをポップするだけで、やり直しを行うためにコマンドスタックに戻すので、元に戻す/やり直し機能を追加するときにも役立ちます。 – rancidfishbreath

関連する問題