建造者模式是一种比较常用的简单的对象创建型设计模式。
它在软件系统中,主要用于面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。
意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
结构:
适用性:
- 需要生成的产品对象有复杂的内部结构。
- 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
- 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。
-
动态性:
此模式在动态性方面没有特别的动态特性。
效果:
建造者模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节;
每一个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及源码
- 大小: 9 KB
- 大小: 52.7 KB
分享到:
相关推荐
NULL 博文链接:https://wy649898543.iteye.com/blog/1431751
C#设计模式之建造者(Builder)模式示例源代码
设计模式C++学习之建造者模式(Builder)
明确建造者(Builder)、具体建造者(Concrete Builder)、指导者(Director)、产品(Product)之间的职责和联系。 ◆建造者(Builder): 给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,...
java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...
Java 设计模式-建造者模式(Builder)结合Android小知识讲解,简单明了
将一个复杂对象的构造与它的表示分离,使同样的构建 过程可以创建不同的表示,这样的设计模式被称为建造者模式。
demo中使用了设计模式中的建造者模式,代码非常精简,本地可正常运行,亲测有效!
主要介绍了Java设计模式之建造者模式(Builder模式)介绍,本文讲解了为何使用建造者模式、如何使用建造者模式、Builder模式的应用等内容,需要的朋友可以参考下
建造者又分两种,一种是有一个专门的类负责决定建造的顺序,如上例,有人可以决定建筑商先建什么,后建什么。代码如下(原谅我用拼音,这么做是不对的):房子类:园林类:
建造者模式是一种创建型设计模式,用于简化复杂对象的创建过程。以下是建造者模式的关键概念和步骤: 1. **分离复杂对象的构建和表示**:建造者模式将一个复杂对象的构建过程与其最终的表示形式分离开来。这样做的...
NULL 博文链接:https://jacky-dai.iteye.com/blog/2295399
主要介绍了Ruby设计模式编程中使用Builder建造者模式的实例,建造者模式将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,需要的朋友可以参考下
主要介绍了C++设计模式之建造者模式Builder的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了PHP设计模式之建造者模式(Builder)原理与用法,结合具体实例形式详细Fenix了建造者模式的概念、原理、用法及操作注意事项,需要的朋友可以参考下
php /** * 建造者模式 * * 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 */ class Product { public $_type = null; public $_size = null; public $_color = null; public function ...
主要为大家详细介绍了Java设计模式之Builder建造者模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
一、 建造者(Builder)模式 57 二、 Builder模式的结构: 58 三、 程序举例: 58 四、 建造者模式的活动序列: 62 五、 建造者模式的实现: 62 六、 建造者模式的演化 68 七、 在什么情况下使用建造者模式 69 C#...