ruby で abstract なソレを書く方法

社内勉強会で GoF が流行っていたり。次だかその次だかで若者が RubyGoF なソレを云々なさるらしいのですが、Ruby で抽象表現ってどうやるんだよ、って後天性記憶不全な爺さんがツッコんでしまいましたがスルー。
仕方が無いので確認してみました。

抽象メソドは raise で

以下な書き方して継承した側で実装を強制、というナニ。

class Hoge
  def fuga
    reise 'Called abstract method ...'
  end
end

class Hogehoge < Hoge
  def fuga
    puts 'hogehoge#fuga()'
  end
end

lambda 使う方法もある模様

上記な形だと以下な書き方になるのか。

class Hoge
  def initialize(&out)
    @out = out
  end
  def fuga
    @out.call
  end
end

STDOUT_OUT = lambda do 
  puts "hogehoge#fuga()"
end

piyo = new Hoge(&STDOUT_OUT)
piyo.fuga

実行までしちゃってますが、心配だったので (ぇ
しかし lambda が使えるとか Ruby すばらですな。