学习模式最好通过真实的例子来学习
Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节. 它的目的是为了将构建复杂对象的过程
和它的部件
解耦。参考http://www.jdon.com/designpatterns/builder.htm。不过里面举的例子让人看了仍然对builder模式是一头雾水,因为这个例子完全无法展示构建的复杂性,只有在构建比较复杂时才有必要使用Builder模式。
真实例子:commons-lang中的ToStringBuilder, HashCodeBuilder, EqualsBuilder.
以一个简化版的ToStringBuilder(来处Guice的ToStringBuilder)为来说明Builder:
java 代码
-
public
class
ToStringBuilder {
-
-
-
final
Map
new
LinkedHashMap
-
-
final
String name;
-
-
public
ToStringBuilder(String name) {
-
this
.name = name;
-
}
-
-
public
ToStringBuilder(Class type) {
-
this
.name = type.getSimpleName();
-
}
-
-
public
ToStringBuilder add(String name, Object value) {
-
if
(map.put(name, value) !=
null
) {
-
throw
new
RuntimeException(
"Duplicate names: "
+ name);
-
}
-
return
this
;
-
}
-
-
public
String toString() {
-
return
name + map.toString().replace('{', '[').replace('}', ']');
-
}
-
}
对比使用和不使用Builder模式写toString()的方式。
不使用Builder:
java 代码
-
public
class
Person {
-
private
Long id;
-
private
String name;
-
private
String phone;
-
private
String address;
-
- // getter and setter
-
-
public
String toString() {
-
return "Person[" +
"id=" + (id == null ? "<null><null>" : id) + ", " +
"name=" + (name == null ? "<null></null></null></null>
<null><null></null></null>
<null><null>" : name) + ", " +
"phone=" + (phone == null ? "<null></null></null></null>
<null><null></null></null>
<null><null><null>" : phone) + ", " +
"address=" + (address == null ? "</null></null></null>
<null><null></null></null>
<null><null><null><null>" : address) +
"]";
</null></null></null></null>
-
}
-
}
使用Builder:
java 代码
-
public
class
Person {
-
private
Long id;
-
private
String name;
-
private
String phone;
-
private
String address;
-
-
-
-
public
String toString() {
-
return
new
ToStringBuilder(
this
.getClass())
-
.add("id"
, id)
-
.add("name"
, name)
-
.add("phone"
, phone)
-
.add("address"
, address)
-
.toString();
-
}
-
}
很容易看到第二种方式要优于第一种方式。第一种方式相当繁琐并且容易出错(比如最后一个filed后面不能加", ",因此新加field必须记得先加上", ",然后添加新的field)。第二种方式采用builder模式,步骤固定,容易使用,因而不容易出错,添加一个新field时只要加上一个add方法就可以了。
接下来看下builder模式是如何解耦过程和部件的。要创建一个对象的toString方法,我们只需要知道这个对象中有哪些field,这就是"部件",知道了这些部件。ToStringBuilder便知道如何根据这些部件组装成需要的产品(代表某个对象的字符串),我们说它封装了“过程”。这便实现过程和部件的分离(解耦),当我们需要不同的字符串表示,只需要创建新的Builder。对于这个简单的程序我们没有这种需要,一旦有这种需示,builder应该被设计成一个接口,以便不同具体类来实现它。
(这里讲的builder和标准的builder稍微有一点区别,标准的builder用一个单独的类Director来封装过程,然而我很少在实际中看到Director的存在)
分享到:
相关推荐
### Builder模式:构建复杂对象的艺术 #### 概述 Builder模式是一种软件工程设计模式,它将复杂对象的构建过程与其表示分离,使同一构建过程能够创建出不同的表示。这一模式通常用于创建复合对象,通过子类继承和...
Builder模式是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离。这种模式在程序开发中常用于构造产品对象,尤其是当对象的构造过程较为复杂时,Builder模式能够帮助我们更好地...
Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许子类按照步骤构建复杂的对象。这种模式将对象的创建过程分离出来,使得同样的构造过程可以创建不同的表示,从而实现对象创建过程的解耦。 ...
Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的...
Builder模式是一种设计模式,它属于创建型模式,主要用于构建复杂对象。这种模式允许我们通过分离对象的构造过程和表示来创建对象,使得构造过程可以更加灵活,并且能够避免在构造过程中对对象状态的直接修改。...
在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Builder模式来替代多参数...
【Java面试题】builder模式
Builder模式是一种设计模式,它属于创建型模式,主要用于复杂对象的构建。在C++中,Builder模式可以帮助我们分步骤地创建一个复杂的对象,而无需关注这些步骤如何组合在一起。这样可以使得构造过程更加灵活,同时也...
Builder模式是一种创建型设计模式,它提供了一种创建对象的灵活方式,将对象的构建过程与表示分离。这种模式在复杂对象的构造过程中特别有用,因为它允许我们通过不同的步骤来构造对象,而不会让客户端代码受到这些...
Builder模式是一种设计模式,主要目的是将复杂对象的构建与表示分离,使得构建过程可以独立于表示进行。在软件工程中,当需要创建的对象具有多个可变组成部分时,Builder模式能够帮助我们构造这些对象,同时保持构建...
**建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...
在Java或者其他面向对象编程语言中,Builder模式经常被用来提高代码的可读性和可维护性。 Builder模式的核心包括四个角色:Product(产品类)、ConcreteBuilder(具体建造者)、Builder(抽象建造者)和Director...
Builder模式是一种设计模式,主要用来创建复杂对象,它将对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。在Android开发中,Builder模式被广泛应用于创建视图或者复杂的对象配置,例如Intent的构造...
在 Java 开发中,Builder 模式是一种强大的创建型模式,它允许我们逐步构建复杂的对象。本文将详细介绍 Builder 模式的意图、解释、编程示例、适用场景以及实际应用。同时,还将提供示例代码的下载链接,方便读者...
Java Builder模式是一种设计模式,它在对象构建过程中提供了一种灵活的方式来组合对象的各个部分,使得代码更加清晰、易于维护。在"Java Builder 模式之贷款办理"这个主题中,我们可以深入理解如何利用Builder模式来...
Builder模式是一种设计模式,主要用来解决复杂对象的构建问题,特别是在对象的构造过程中有大量可选参数时。在Java编程中,FreeBuilder是一个自动化工具,它可以帮助开发者为Java 1.6及更高版本的类自动生成Builder...
Builder模式是一种设计模式,主要用来解决复杂对象的构建问题,特别是在对象的构造过程中涉及大量的参数时。在Java编程中,Builder模式提供了一种更加灵活、结构化的创建对象的方式,避免了构造函数的过度膨胀和...
在Android开发中,Builder模式是一种常用的创建型设计模式,它能帮助我们构建复杂对象,同时保持构造过程的清晰和简洁。在本示例中,我们关注的是如何利用Builder模式来设置字体大小、颜色以及位置等属性。这在创建...