Adapter その1
所謂ラッパーですね。まずは単純に移植。
継承の場合
module Adapter class Banner def initialize(str) @str = str end def show_with_paren puts "(#{@str})" end def show_with_aster puts "*#{@str}*" end end class PrintBanner < Banner def print_weak show_with_paren end def print_strong show_with_aster end end end p = Adapter::PrintBanner.new("Hello") p.print_weak p.print_strong => (Hello) *Hello*
委譲の場合。PrintBannerのみ置き換え。
class PrintBanner def initialize(str) @banner = Banner.new(str) end def print_weak @banner.show_with_paren end def print_strong @banner.show_with_aster end end => (Hello) *Hello*
さて、Rubyっぽく考えてみますか。