ライオンを狩るハンタークラスがあったのですが
急遽、野犬も狩るように言われてしまいました。
しかし、野犬はライオンとは別のインターフェイスを持っているので
このままではうまく使えません。
そこで野犬クラスを包み込んだようなadapterクラスを用意して中継する感じです。
このパターンは仕方なくって感じがしますね・・・
もちろん初めから野犬も狩猟の対象になることが分かっていたのなら野犬も同じインターフェイスを備えるべきです。
class Lion def roar end end class AfricanLion < Lion def roar "がおー" end end class Hunter def hunt(target) puts "ターゲットは#{target.roar}と威嚇している!" end end class WildDog def bark "わん" end end class WildDOgAdapter < Lion def initialize(dog) @dog = dog end def roar @dog.bark end end african_lion = AfricanLion.new wild_dog = WildDog.new wild_dog_adapter = WildDOgAdapter.new(wild_dog) hunter = Hunter.new hunter.hunt(african_lion) hunter.hunt(wild_dog_adapter) #出力 #ターゲットはがおーと威嚇している! #ターゲットはわんと威嚇している! #