Hatena::Groupruby

kdmsnrの日記

1000-01-03

Template Method

11:28

class Report
  def initialize
    @title = 'Monthly Report'
    @text =  ['Things are going', 'really, really well.']
  end

  # テンプレートメソッド  -- 呼び出し順が決まってる
  def output_report
    output_head
    output_body
    output_foot
  end

  # 実装しないとダメ
  def outputbody
    raise 'Called abstract method: output_head'
  end

  # してもしなくてもOK -- フックメソッド
  def output_head
  end

  def output_foot
  end
end

class HTMLReport < Report
  #...
end

class PlainTextReport < Report
  #...
end

# クライアント
HTMLReport.new.output_report
PlainTextReport.new.output_report

実例

11:28

require 'webrick'

class HelloServer < WEBrick::GenericServer
  def run(socket)
    socket.print('Hello TCP/IP world')
  end
end
run(sock) -> ()
クライアントと接続された TCPSocket オブジェクトを引数として呼ばれ、具体的な処理を行います。 WEBrick::GenericServer のサブクラスはこのメソッドを適切に再定義しなければいけません。