ダックタイピング
オブジェクト指向設計実践ガイドを読む。
まだこれを読めるレベルまで到達できてないっぽいから読むの終わり。
ただ、ダックタイピングについての例が分かりやすかった。
# はじめの段階 class Trip attr_reader :bicycle, :customers, :vehicle def prepare(mechanic) mechanic.prepare_bicycle(bicycle) end end class Mechanic def prepare_bicycle(bicycle) # 略 end end
# 上のにTripCoordeinatorとDriverが追加 # 段々とややこしくなっていく class Trip attr_reader :bicycle, :customers, :vehicle def prepare(prepares) prepares.each do |preparer| case preparer when Mechanic preparer.prepare_bicycle(bicycle) when TripCoordinator preparer.buy_food(customers) when Driver preparer.gas_up(vehicle) end end end end class Mechanic def prepare_bicycle(bicycle) # 略 end end class TripCoordinator def buy_food(customers) # 略 end end class Driver def gas_up(vehicle) # 略 end end
# 上のをダックタイピングでコーディングすると class Trip attr_reader :bicycle, :customers, :vehicle def prepare(prepares) prepares.each do |preparer| prepare.prepare_trip(self) end end end # すべてのpreparerは'prepare_trip'に応答するダック class Mechanic def prepare_trip(trip) prepare_bicycle(trip.bicycle) end # 略 end class TripCoordinator def prepare_trip(trip) buy_food(trip.customers) end # 略 end class Driver def prepare_trip(trip) gas_up(trip.vehicle) end # 略 end