2009-05-04 :-)
_ 朝ッ
0730 起床
_ 図書館へ寄贈した
重かった
_ ちょっと休憩
近所の喫茶店。わからないMPEG
_ [デザインパターン][Strategy]Head First デザインパターンを写経する - 1章 Strategy パターン
サンプルコードをそのまま Ruby で書いたつもり。Java でいう interface は Ruby に存在するの?
#!/usr/bin/ruby -Ks class Duck @@quackBehavior = nil @@flyBehavior = nil def initialize end def performFly @@flyBehavior.fly end def performQuack @@quackBehavior.quack end def swim puts "すべての鴨は浮かびます。おとりの鴨でも!" end end class FlyBehavior def fly end end class FlyWithWings < FlyBehavior def fly puts "飛んでいます!" end end class FlyNoWay < FlyBehavior def fly puts "飛べません!" end end class QuackBehavior def quack end end class Quack < QuackBehavior def quack puts "ガーガー" end end class MuteQuack < QuackBehavior def quack puts "<沈黙>>" end end class Squack < QuackBehavior def quack puts "キューキュー" end end class MallardDuck < Duck def initialize @@quackBehavior = Quack.new @@flyBehavior = FlyWithWings.new end def display puts "本物のマガモです" end end def main mallard = MallardDuck.new mallard.performQuack mallard.performFly end main
% ./duck.rb ガーガー 飛んでいます!
4873112494
_ おやつ
グーテデロワのラスク
_ [Observer][デザインパターン]Head First デザインパターンを写経する - 2章 Observer パターン
Mix-in を使うといいのかしら。Observer に関しては lib/ruby/1.8/observer.rb が Ruby での Observer 実装のようだ。
#!/usr/bin/ruby -Ks module Subject def registerObserver( observer ) end def removeObserver( observer ) end def notifyObservers end end module Observer def update( temp, humidity, pressure ) end end module DisplayElement def display end end class WeatherData include Subject @temprature @humidity @pressure def initialize @observers = [] end def registerObserver( observer ) @observers << observer end def removeObserver( observer ) @observers.delete( observer ) end def notifyObservers @observers.each {|o| o.update( @temprature, @humidity, @pressure ) } end def measurementsChanged notifyObservers end def setMeasurements( temprature, humidity, pressure ) @temprature = temprature @humidity = humidity @pressure = pressure measurementsChanged end end class CurrentConditionDisplay include Observer include DisplayElement def initialize( weatherData ) @weatherdata = weatherData @weatherdata.registerObserver( self ) end def update( tempreture, humidity, pressure ) @tempreture = tempreture @humidity = humidity display end def display puts "現在の気象状況: 温度#{@tempreture}度 湿度#{@humidity}%" end end def main weatherdata = WeatherData.new currentDisplay = CurrentConditionDisplay.new( weatherdata ) weatherdata.setMeasurements( 27, 65, 30.4 ) weatherdata.setMeasurements( 28, 70, 29.2 ) weatherdata.setMeasurements( 26, 90, 29.2 ) end main
% ./weather.rb 現在の気象状況: 温度27度 湿度65% 現在の気象状況: 温度28度 湿度70% 現在の気象状況: 温度26度 湿度90%
4873112494