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っぽく考えてみますか。