7

私は、多くの新しいプロジェクトで同じプログラミング パターンを何度も繰り返し書いていることに気づきました。私は、そのようなパターンの典型的な実装の再利用可能な独自のライブラリを作成することを考えていました.すべての可能な設計パターンをカバーしようとするのではなく、そのような典型的な実装をライブラリに入れることが理にかなっていることを経験が示しているものだけをカバーしています. factory など ...)-しかし、Java で既に利用可能なこの目的のための既存のライブラリがないかどうかを知りたいのですが?.

複雑な要件 (パターンの構成、複数のパターンに参加するクラスなど) を持つさまざまな実装間で再利用できるように、プログラミング パターンを完全に一般化することは非常に難しいことを私は知っています。ただし、ほとんどの場合、必要なパターンのインスタンス化は非常に単純で標準的なものであり、多くの場合、そのようなライブラリを使用することで実装作業を少しスピードアップできます。

ご意見ありがとうございます。!

4

9 に答える 9

4

デザインパターンはただの... パターンです。それらは誰でもすぐに使用できるクラスではありませんが、いくつかのプロジェクトで見られる共通の概念です。そのため、デザイン パターン API は見つかりません。

于 2011-11-06T22:10:40.930 に答える
3

これこそが、私がPerfectJPatternを作成した理由です。コード例を確認して理解してください。それらはダウンロード可能で、各パターン実装のサイト ドキュメント ページでも利用できます。GoF の本を読むと、例をより簡単に理解できます。

たとえば、コードで Composite パターンを使用する場合、および PerfectJPattern を使用する場合は、Compositeとして使用するインターフェイス (ジェネリック パラメーターとクラス インスタンス) を指定するだけでよく、残りは提供されます。 を参照してください。PerfectJPattern コンポジット. そのページの下部に、それを実現する方法を示す実際の例が提供されています。

考慮すべきもう 1 つの側面として、PerfectJPattern では、一般的なパターン実装 (たとえば、 perfectjpattern-core Maven サブモジュール) を必ずしも再利用する必要はなく、純粋な抽象レベル (perfectjpattern-api など) のみを再利用するという選択肢もあります。 Maven サブモジュール) を作成し、自分で実装を提供します。PerfectJPatternでは、Maven プロジェクト構造にも反映されたきめの細かい階層化された設計があるため、さまざまな抽象化レベルで再利用できる柔軟性があります。perfectjpattern-api を再利用すると、必要に応じて抽象的なテンプレート ガイドラインが得られます。これは、独自のデザイン パターンの実装を高速化するのに役立ちます。ただし、理想的には、可能な限り再利用する必要があります。

更新: 以下のコメントをフォローアップすると、すべてのパターンを完全にコンポーネント化できるわけではないことに注意してください。パターンからコンポーネントへ を参照してください。部分的にしかコンポーネント化できないパターンもあれば、Singleton のようにまったくコンポーネント化できないパターンもあります。Singleton はコンテキストに依存しすぎているため、PerfectJPatternでしかインターフェイスを見つけることができません。ただし、PerfectJPatternでは、Observer、Command、Adapter、Decorator、Composite、Proxy、Visitor、DAO などのパターンが完全にコンポーネント化されています。

于 2012-01-11T09:54:53.797 に答える
1

あなたが探しているのはPerfectJPatternです。

チェックアウトdp4j。シングルトンパターンをで実装し、@Singletonでレイジー初期化することができます@Singleton(lazy=true)。これは、「Javaで実装された再利用可能なコンポーネント化されたデザインパターンのコレクション」です。

シングルトンの場合はdp4jをお勧めします。シングルトンを実装するには、クラスに注釈を付け、@Singletonレイジー初期化するには、注釈を付けます@Singleton(lazy=true)

于 2011-11-11T22:00:10.140 に答える
1

デザインパターン用に再利用可能な実装を作成できないという他の回答には同意しません。ただし、これは常に単純であるとは限らず、多くの抽象的なプログラミングが必要になります。

C# から来た私は、Java のオブザーバー パターンの単純さに欠けていました。(C# でのイベント) Javaの再利用可能なジェネリック オブザーバーを完成させた後、 PerfectJPatternライブラリに出会いました。

調べてみるといいかもしれません。

コンポーネント化されたパターンは、本質的に、元のパターンと同じくらい多くのユースケースをカバーし、開発者が毎回同じ定型コードを再実装する必要がない、元のパターンのコンテキストに依存しない再利用可能型安全なバリエーションです。異なる文脈。デザイン パターンはデザインに関して再利用可能であり、コンポーネント化されたパターンはデザインとコードに関して再利用可能です。

可能な限りあらゆる形式の重複を減らしたいと思っていることを称賛します。「同じことを繰り返さない」は、プログラミングにおける最も重要な原則の 1 つです。


いくつかの追加の引数の設計パターンをライブラリに集中させることができるため、さらにいくつかの例を示します。

于 2011-11-06T22:37:50.157 に答える
0

Java/j2EE用のJTデザインパターンフレームワーク

于 2011-11-06T23:04:04.637 に答える
0

高階関数やその他の機能を提供する言語で可能です。これは、「折り紙パターン」ライブラリについて説明している論文を参照しているスライドです。次のパターンの「ライブラリコード」が表示されます:Composite、Iterator、Visitor、Builder。したがって、今日できるjvmでそれを試してみたい場合は、scalaを使用してください。http://www.slideshare.net/remeniuk/algebraic-data-types-and-origami-patterns

于 2011-11-07T12:40:47.830 に答える
0

多くのパターンが Java SE に組み込まれています - 気付かないかもしれません。

デコレータはjava.ioパッケージ全体にあります。

java.sqlパッケージは AbstractFactory です。

すべてのラッパー クラスは Flyweight です。

私は、パターン ライブラリを探すなと言う人たちを支持します。コードを書くときにそれらを発見する必要があります。

于 2011-11-07T00:45:03.283 に答える
0

複数のプロジェクトで同様のコードを繰り返していることに気付いた場合は、繰り返される部分を再利用可能なコードのライブラリに抽出して、将来同じことを繰り返さないようにすることをお勧めします。

これは、完全に一般的な再利用可能な設計パターンの実装につながる可能性は低いです。

于 2011-11-06T22:33:20.807 に答える
-1

森や木が見えますか?

設計パターンは、事前に選択するのではなく、明らかにする必要があります。それらが明らかになる頃には、コードが存在するため、パターンは必要ありません。次に、解決策がどのように解決され、脳が無意識のうちに正しいアプローチを選択したかに驚嘆します。それは、あたたかいファジーな「私はそのコードを信頼している」という感覚を与えてくれます。

デザイン パターン ライブラリを作成すると、大きなハンマー (またはハンマー ファクトリー、またはハンマー ファクトリー ファクトリー [1]) を作成したことになり、すべてが便利な釘 (ネジを含む) になり、その結果、多くの親指とスパゲッティのボウルが痛みます。開発チーム。

[1] http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12

于 2011-11-06T22:47:58.823 に答える