デザインパターンbuilder

builderパターンです
作成過程が同じで異なる表現形式の結果を得るためのパターン


class SaltWater
attr_accessor :water, :salt
def initialize(water, salt)
@water = water
@salt = salt
end
end
class SaltWaterBuilder
def initialize
@salt_water = SaltWater.new(0,0)
end
def add_solute(salt_amount)
@salt_water.salt += salt_amount
end
def add_solvent(water_amount)
@salt_water.water += water_amount
end
def abandon_solution(salt_water_amount)
@salt_water.salt *= 1 - salt_water_amount / (@salt_water.salt + @salt_water.water)
@salt_water.water *= 1 - salt_water_amount / (@salt_water.salt + @salt_water.water)
end
def result
@salt_water
end
end
class Director
def initialize(builder)
@builder = builder
end
def constract
@builder.add_solvent(100)
@builder.add_solute(40)
@builder.abandon_solution(70)
@builder.add_solvent(100)
@builder.add_solute(15)
end
end

b = SaltWaterBuilder.new
d = Director.new(b)
d.constract
p b.result
# #