名字: 建造者模式(Builder)
意图: [b]将一个复杂的构建与其表示相分离[/b], 得同样的构建过程可以创建不同的表示.
动机: 软件系统中, 有时候面临着“一个复杂对象”的创建工作, 其通常由各个部分的子对象用一定的算法构成;
由于需求的变化, 这个复杂对象的各个部分经常面临剧烈变化, 但将其组合在一起的算法却相对稳定.
[img]http://dl.iteye.com/upload/attachment/192361/2159c9cb-795a-3efe-8d3a-a8a75bc6518c.jpg[/img]
意图: [b]将一个复杂的构建与其表示相分离[/b], 得同样的构建过程可以创建不同的表示.
动机: 软件系统中, 有时候面临着“一个复杂对象”的创建工作, 其通常由各个部分的子对象用一定的算法构成;
由于需求的变化, 这个复杂对象的各个部分经常面临剧烈变化, 但将其组合在一起的算法却相对稳定.
class Director
def initialize
@process = [:create_footer, :create_body, :create_header]
end
def build(builder)
@process.each do |p|
builder.send(p)
end
end
end
class HouseBuilder
def initialize
end
def create_footer
raise 'Abstract method'
end
def create_body
raise 'Abstract method'
end
def create_header
raise 'Abstract method'
end
end
class VillageHouseBuilder < HouseBuilder
def create_footer
puts "泥土地"
end
def create_body
puts "木石结构"
end
def create_header
puts "瓦片屋顶"
end
end
class TownHouseBuilder < HouseBuilder
def create_footer
puts "水泥地"
end
def create_body
puts "砖结构"
end
def create_header
puts "水泥板屋顶"
end
end
director = Director.new
village_house_builder = VillageHouseBuilder.new
director.build(village_house_builder)
town_house_builder = TownHouseBuilder.new
director.build(town_house_builder)
[img]http://dl.iteye.com/upload/attachment/192361/2159c9cb-795a-3efe-8d3a-a8a75bc6518c.jpg[/img]