2017-02-08 6 views
1

私はアダプターパターンの周りに頭を抱えようとしています。マッパーはアダプターパターンのバージョンです

私は達成したことを理解していると思います。クライアントに使用できるようにオブジェクトを別のインターフェイスに変換することです。

例では、意味が分かりましたが、オブジェクトを取得し、必要なオブジェクトタイプに(おそらくはロジックを適用する)プロパティをマップするマッパーで同じことを達成できるように感じます。実際のオブジェクト代わりに使用されます。

違いはありますか、同じ名前の別の名前がありますか?

答えて

2

アダプタは、Mapperのような新しいオブジェクトの作成者ではなく、インターフェイストランスレータとして考えることができます。

Mapper m = new Mapper() 
Dog dog = (Dog) m.mapRow(resultSet); // creating new object 

猫のインスタンスがまだここに存在しているDogAdapterインスタンスが作成され、犬のインタフェースに猫のオブジェクトを「適応」され、むしろ、新しい「犬のインスタンスが」、作成されません。

Cat cat = new Cat("Felix"); 
Dog dog = new DogAdapter(cat); // cat still exists 
dog.bark(); // yields 'meow' 

これらは明らかに意図された例ですが、うまくいけば理解しやすくなります。

+0

良い例をありがとう、それは完璧な意味があります、なぜあなたはそれをする必要があるのか​​を私に説明するために精巧にできますか?オプション1の代わりに?それは、犬の適応オブジェクトに伝えるために猫への更新を許可することですか?それは静的なプロパティの対動的に更新されたプロパティの問題ですか? – berimbolo

+0

単純に呼び出しを変換するよりも、ターゲットインターフェイス(この場合はDogはターゲットインターフェイスです)をサポートするためにデータをコピーする方が高価になることがあります。リモートインタフェースを別のインタフェースに適用することは、バックエンドデータに基づいてプロパティが変更される可能性がある別の例です。属性をコピーしたくない場合は、「現在の」値ではなく「スナップショット」を提供するためです。 –

関連する問題