仮定の状況: 複数のプラットフォームで実行したいサウンド ライブラリを作成しています。できるだけ多くのコードをプラットフォームに依存しないようにしますが、Windows と OSX と Linux で変更する必要があるコードもあります。
だから私はこれらのさまざまな実装をすべて書いていますが、エンドユーザーが自分のプログラムを Linux や Windows などに依存させなければならないようにしたくありません。また、API への 4 つの異なるインターフェイスを維持したくありません。(これらはファクトリを作成する理由の一部にすぎないことに注意してください。他の状況も確かにあります)。
そこで、クライアントが使用するすべてのメソッドを定義する、この優れた汎用SoundObject
基本クラスを定義します。次に、LinuxSoundObject
、WindowsSoundObject
、および から派生した他の 5 つを作成しSoundObject
ます。しかし、これらすべての具体的な実装をユーザーから隠し、SoundObject
. 代わりに、 my を呼び出してSoundObjectFactory
、普通の古い に見えるものを取得する必要がありますSoundObject
が、実際には、正しいランタイム タイプを選択し、自分でインスタンス化しました。
2 年後、新しい OS が登場し、Windows に取って代わります。ソフトウェアの書き直しを強制する代わりに、新しいプラットフォームをサポートするようにライブラリを更新するだけで、インターフェイスに変更が見られることはありません。
これはすべてかなり不自然ですが、うまくいけばアイデアが得られます。
ファクトリは、インターフェイスのコンシューマーを、実際に使用されているランタイム タイプ (つまり、実装) から分離します。