2012-01-25 6 views
1

Addison Wesleyから - デザインパターン。フレームワークは抽象クラスを使用します - ファクトリメソッド

(ファクトリメソッド)

フレームワークを定義し、オブジェクト間の関係を維持するための抽象クラスを使用します。フレームワークは、しばしばこれらのオブジェクトを作成する責任があります。

ここでの著者は、上記の引用によって何を意味していますか?
フレームワークは何を表していますか、またどのようにこれらのオブジェクトを作成する責任がありますか?

答えて

0

このような一般的なレベルでこれについて議論することは自明ではありません。私はしようとします。

通常、フレームワークはフレームワークのコードで使用される抽象クラスのセットを提供しますが、そのバインディングは実行時にのみ解決されます。

フレームワークは、これらのクラスのインスタンスのメソッドを呼び出します。これらのクラスのメソッドは、コード内で実装する必要があります。

つまり、コードでは、そのようなクラスを拡張し、「空白を埋める」でしょう。

あなたのコードとフレームワークのコードとの間の接着剤は、そのような抽象クラス(またはインターフェイスfwiw)によって定義されたコントラクトです。フレームワークは、与えられたメソッドがK型のパラメータとT型の戻り値を取りますそのセマンティックが実装者によって尊重されることを前提としています。

一方、メソッドを実装すると、そのメソッドにアタッチされているコントラクトを暗黙的に受け入れ、それに関連付けられているセマンティクスを実装します。

十分にはっきりしていたと思います。

0

OOP世界のソフトウェアフレームワークは、プログラマがアプリケーションを作成するために使用し、拡張できる基本機能を提供する一連のクラスです。車を開発するためのフレームワークの簡単な例を見てみましょう。フル・カーを実装していないが、フォワード、ストップ、リバースの基本的なメソッドを提供するかもしれないautomobileという抽象クラスを持つかもしれません。車輪用の別のクラスのクラスが存在する可能性があります。自動車クラスには車輪(関係を含む)があり、その関係は抽象的な自動車クラスで定義できます。したがって、フレームワークは「オブジェクト間の関係を維持する」。

しかし、抽象的な自動車クラスを使用するには、具体的なクラス、たとえばフォードピックアップトラックやフェラーリスポーツカーを作成する必要があります。ここでは、工場設計パターンを使用して、これらのタイプの車両の具体的なインスタンスを作成することができます。ファクトリクラスは、フレームワークが使用するさまざまなタイプの自動車の特定のインスタンスを作成します。しかし、多くの場合、フレームワークはフォードかフェラーリかどうか気にしません。フォワード、ストップ、リバースのメソッドを呼び出すだけです。彼らが実際にどのように実装されているか(例えば、フェラーリはFordよりもはるかに速く加速することができます)は、フレームワークには関係ありません。ファクトリクラスを使用すると、フレームワークのこれらの詳細がカプセル化されます。 「フレームワークはしばしばこれらのオブジェクトを作成する責任があります」ということは、フレームワークが自動車のための基本的な工場を提供し、自動車の独自の具体的な実装を追加することができるという事実を指しています。