Adapter パターン

id:hyuki さんのデザインパターン本から Adapter パターンを移植してみます。まずは継承を使った Adapter です。書籍での interface Print は使いません。

#!/usr/local/bin/ruby

class Banner
  def initialize(string)
    @string = string
  end

  def show_with_paren
    puts "(#@string)"
  end

  def show_with_aster
    puts "*#@string*"
  end
end

class PrintBanner < Banner
  def initialize(string)
    @string = string
  end

  def print_weak
    self.show_with_paren
  end

  def print_strong
    self.show_with_aster
  end
end

p = PrintBanner.new("Hello")
p.print_weak
p.print_strong

これを実行すると

(Hello)
*Hello*

となります。

一方の、委譲を使った Adapter へ変更するには、PrintBanner クラスを

class PrintBanner < Banner
  def initialize(string)
    @string = string
    @banner = Banner.new(string)
  end

  def print_weak
    @banner.show_with_paren
  end

  def print_strong
    @banner.show_with_aster
  end
end

とします。

Adapter パターンはシンプルなのもあって「ruby っぽさ」みたいなのをアピールする案が出ませんでした。