4

これは、接続されたテーブルを使用して作成したチャートの会社の例です。

これは、テーブルが接続された折れ線グラフの例です。

私の完全なアイデアを更新する ここに画像の説明を入力してください

この投稿を始めて以来、私はこの多くの考えを与えられ、ついにビルダーパターンを使用してしっかりしていると思うという考えを思いつきました。まず、完全なアイデアについて説明します。

私の会社は、すべてのプログラムに使用できる、接続されたテーブルを備えたある種の標準グラフを必要としています(これにより、プログラムはすべて同じであると感じられます)これらのチャートのほとんどは同じであるため、私は新しいプログラムを作成したり、チャートを別の場所に配置したりするたびに、新しいチャートを作成する手間を省くことができます。

私の会社は主に3つの異なるチャートを使用しています。

  • 棒グラフ
  • 折れ線グラフ
  • 円グラフ

これらのチャートを作成するとき、いくつかの未知の変数があります。

  • チャートシリーズの名前:これは表示される名前であり、すべての線/棒/円スライスとは異なります

  • 期間:チャートデータは、1日または1週間(月曜日、火曜日、水曜日などの毎日)、1か月(1月、2月、3月、4月など)、または時刻(午後8時、午後9時)の期間から取得されます。等)。

  • グラフの種類:もちろん違いは、ユーザーが見たいグラフの種類です。

最後になりましたが、作成するグラフの唯一の違いは円グラフ内にあります。円グラフは、シリーズから作成されたのではなく、監視可能なリストから作成されたJavafxの唯一のグラフであるため、pieChartBuilderはデータを使用して挿入する必要があります。他とは異なる方法。

上の写真はUMLダイアグラムではなく、新しいプログラムがどのように動作し、デザインパターンを調整するかを示しています。これが、私の考えのウォークスルーです。

  • GUI:まず、Guiは常に実際のロジックから分離されています。JavaFxで作成する必要があり、Directorクラスのインスタンスが必要なことを除いて、GUIに何かを要求する予定はありません。

  • ディレクター:ディレクタークラスは、すべてのアクションが発生する場所です。最初に、クライアントは、取得したいチャートのタイプ、データを取得したい期間、そしておそらく表示したいデータの種類をディレクターに呼び出します。クライアントは、データを表示する期間(日、週、月、年など)も設定します。

次に、ディレクターはそのすべてのデータを取得し、統計クラスのインスタンスをクラス分けして、ディレクターがチャートビルダーに渡すことができるデータをクラスに要求します。

  • 統計:統計クラスは、データがすでに含まれているかどうかをチェックし、含まれていない場合は、データベースへのオブジェクトのリストをクラス分けします。

  • データベース:データベースは、クライアントが送信した期間(日、週、月、年ベースのいずれか)のデータのクラスを非常に単純に作成し、オブジェクトを作成してリストに追加し、統計クラス。

  • (戻って)統計クラスでは、オブジェクトデータが計算され、ディレクターに返されます。

  • (ディレクターに戻る)ディレクターはchartBuilderを呼び出して、クライアントが指定したタイプのチャートを時間枠(時間の配列または配列リストです。これはクライアントがディレクターで設定できるオプションですDirector.setStandardTime(time))で作成します。次に、ビルダーは、ディレクターから取得したデータを使用してチャートとテーブルを作成します。その後、クライアントはChartBuilder.getChart()を呼び出して、それを自分のレイアウトに追加できます。

これが私の考えです。コメントをお願いします。読んでいただきありがとうございます。すべての回答を読むのを楽しみにしています。

4

2 に答える 2

3

グラフィックタスクの最も一般的なデザインパターンは、デコレータ(多くの場合、「流暢な」インターフェイスを備えています)、プロトタイプ/クローン、およびビジターです。これらはおそらく重宝します。

デコレータ:オブジェクトに属性を段階的に追加する場合に使用します。そのような:

final int radius = 100;
// With fluent interface
final Graphic boxedShadedCircle = new Circle(radius, 100, 100).shaded().boxed();
// Without fluent interface
final Graphic nonFLuentBoxedShadedCircle = new Boxed(new Shaded(new Circle(radius, 100, 100)));

プロトタイプ/クローン:オブジェクトを複製できるようにしたい場合(コピー/貼り付け機能)。これは基本的にClonableインターフェイスです。

ビジター:実際のオブジェクトのコードに追加せずにオブジェクトに機能を追加したい場合。たとえば、アプリケーションがなんらかのスクリプト可能である場合。例については、この投稿を参照してください:ビジターパターン

次に、特定のソリューションに関連します。

デコレータは、最初のソリューション提案を実装するための良い方法のようです。または、テンプレートメソッドまたはある種の構成(「汎用グラフドロワーとデータオブジェクトの組み合わせ」)。

2番目のソリューションでは、Factoryが適切と思われます。

どちらがベストかは言えません。それはあなたの地域の状況に依存します。すべての実装には長所と短所があり、秘訣は長所が短所を上回る適切なものを選択することです。

更新された質問の更新:

ChartBuilder:これはおそらくデザインパターン「Builder」であるはずです。このdpは、ドキュメントの説明やデータセットなどの抽象的な説明/製品をさまざまな方法で表現またはレンダリングすることを目的としています。

監督:これはデザインパターンメディエーターです。または、意図に応じてファサード。くだらないレガシーコードのボールを「隠している」場合はファサード、いくつかのより現代的なクラスの相互作用を調整している場合はメディエーター。ここにはたくさんの灰色の領域があります。DirectorがGUIとの対話(サイズ変更、非表示など)も処理する場合、それは間違いなくMediatorです。

全体として、構造はモデル/ビューアー/コントローラーです。Directorはコントローラーとして機能し、Statisticsはモデルとして機能し、chartBuilderはビューアとして機能します。

コントローラをメディエーターとして機能させる場合のように、いくつかのデザインパターンが重複することは珍しくありません。

戻り値を使用した直接呼び出しとしてではなく、応答のデザインパターンオブザーバーを使用して要求/応答としてすべてを実装すると、より幸せになる可能性があります。そうすればより柔軟になり、スレッド内のレイテンシー/計算/データベースルックアップをより適切に隠すことができます。

chartBuilderにCompositeを使用することをお勧めします。1つだけではなく、データに対して同時に複数のビューをアクティブにしたい場合。

于 2012-12-04T07:38:34.207 に答える
0

EyeSeeを見て、Java実装を作成します

于 2012-12-07T22:05:44.787 に答える