ファサードのデザインパターンは、継承よりも「関連付け」を中心にしていますよね?
このような自動車システムがある場合:
車(クラス)
->ボディ(クラス)
->ハンドル(クラス)
-> Chassie(クラス)
->ホイール(クラス)
では、これらのクラスはCarから継承されていませんか?理論的には、継承には「できる」関係があると教えられてきたので..「人は学生になることができます」...「車はチャシーを持っています」それは協会であると推測しますか?
何か案は?:)
ファサードのデザインパターンは、継承よりも「関連付け」を中心にしていますよね?
このような自動車システムがある場合:
車(クラス)
->ボディ(クラス)
->ハンドル(クラス)
-> Chassie(クラス)
->ホイール(クラス)
では、これらのクラスはCarから継承されていませんか?理論的には、継承には「できる」関係があると教えられてきたので..「人は学生になることができます」...「車はチャシーを持っています」それは協会であると推測しますか?
何か案は?:)
はい。それは正しいです。ファサードは協会を中心にしています。さまざまな関連サブシステム(ほとんどが連携して動作します)をラップして、クライアントに意味のあるシンプルなインターフェイスを提供します。サブシステムは同じ継承階層にある必要はありませんが、ほとんどの場合関連付けられています。
あなたの車の例:
http://www.go4expert.com/forums/showthread.php?t=5127#facade
私はあなたに同意します。ファサードパターンの考え方は、それらのオブジェクトの管理と操作を容易にするために、ファサードにラップする関連オブジェクトの束があるということです。
Waleed Khanがコメントで述べたように、この例では、車がさまざまな部品で作られているため、構図で線がぼやけています。ファサードを構成するオブジェクトが、より大きなエンティティの一部になることなく、すべて一緒に機能する場合があります。
car.turnLeft()
車の例では、ホイールとステアリングホイールの両方に影響を与える可能性のあるようなことができるため、作業が簡単になります。オブジェクト間の調整は。によって処理されCar
ます。
私はあなたに同意しません、ファサードは関連も継承も中心にされていません。
ファサードは、より大きなコード本体への簡略化されたインターフェイスを提供するオブジェクトです。
これは、サブシステムの実装が関連付けまたは継承に基づいているかどうかに関係なく、サブシステムのより高いレベルのビューを提供し、その複雑さを隠すために使用されることを意味します。
ファサードのもう1つの代替手段はtransparent facade
、クライアントがファサードを通過して、サブシステムの個々の操作にアクセスできるようにすることです。
あなたが求めている車のシステムはほんの一例であり、パターンはそれに限定されません。
下にあるオブジェクトが関連付けられているか継承されているかは、パターンがどのように機能するかとはあまり関係のない実装の詳細であるという感情に同意します。
率直に言って、Facadeは、コンポーネント化と同じことを達成しようとするパターンです。さまざまなものを簡単に操作できるとは限りませんが、1つのインターフェイスが必要です。FacadeがJavaの世界で常に適用されている最も一般的な例は、JavaMailインターフェースを使用する手段を提供することです。あなたはセッションに対処する必要さえありたくありません。それは愚かです。同様に、Springの永続性クラスはファサードですが、アスペクトを使用してセッションを無視できます。また、セッションが連続する呼び出しで実際に異なるため、OpenSessionInViewであるため、単純化の危険があります。
ファサードが適用されるかどうか疑問に思う際に尋ねる重要な質問は、何を隠すことができるかということです。そして、あなたは本当にそれを達成することができますか?
ファサードパターンは、アダプタパターンの変形です。アダプタパターンは、インターフェイスを「ラップ」して別のインターフェイスに変換します(クライアントが期待する形式に適応させます)。多くの場合、新しいインターフェイスを古いクライアントソフトウェアに適合させるために使用されます。または、古い、くだらない、Big-Ball-O-Mudソフトウェアを、光沢のある新しい、おそらくよりクリーンなインターフェイスでラップし、後で古いくだらないコードを置き換えることを目指します。
一方、Facadeパターンはインターフェイスをラップし、その簡略化された形式をクライアントに提示します。
どちらも、構成と継承とはあまり関係がありません。
エリック・フリーマンとエリザベス・フリーマンの著書「ヘッドファーストデザインパターン」を調べてみてください。デザインパターンを使って何かをすることを学ぶ限り、GO4の本であるIMHOよりもはるかに優れています。