浏览 1706 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-14
最后修改:2010-01-14
它在软件系统中,主要用于面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 结构: 适用性:
动态性: 此模式在动态性方面没有特别的动态特性。 效果: 建造者模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节; 每一个Builder都相对独立,而与其它的Builder无关; 可使对构造过程更加精细控制; 建造者模式的缺点在于难于应付“分步骤构建算法”的需求变动。 下面是个小例子: class Director def build(builder) [:header, :toolbar, :content, :footer].each do |m| builder.send("build_#{m}") end end end class BlueWindowBuilder def build_header BlueHeader.new end def build_toolbar BlueToolbar.new end def build_content BlueContent.new end def build_footer BlueFooter.new end end class BlueHeader def initialize @bg = 'Blue' @title = 'Blue window' puts "Build #{self.class.name}" end end class BlueToolbar def initialize @bg = 'light blue' @buttons_bg = 'blue' puts "Build #{self.class.name}" end end class BlueContent def initialize @bg = 'gray' puts "Build #{self.class.name}" end end class BlueFooter def initialize @font_color = 'white' puts "Build #{self.class.name}" end end class GrayWindowBuilder def build_header GrayHeader.new end def build_toolbar GrayToolbar.new end def build_content GrayContent.new end def build_footer GrayFooter.new end end class GrayHeader def initialize @bg = 'Gray' @title = 'Gray window' puts "Build #{self.class.name}" end end class GrayToolbar def initialize @bg = 'Black' @buttons_bg = 'gray' puts "Build #{self.class.name}" end end class GrayContent def initialize @bg = 'white' puts "Build #{self.class.name}" end end class GrayFooter def initialize @font_color = 'black' puts "Build #{self.class.name}" end end dir = Director.new puts "\nBuilding blue window ...\n" dir.build(BlueWindowBuilder.new) puts "\nBuild Gray window ...\n" dir.build(GrayWindowBuilder.new) 类图: 点击下载UML及源码 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |