`
Qaohao
  • 浏览: 261679 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java之Builder模式使用

    博客分类:
  • Java
阅读更多
   之前用过听过builder设计模式,但自己的代码中从来没有应用过,只知道在做GUI开发时用到的控件,它们当中有些使用了builder设计模式。自己也不明白在什么场景下才应该使用。

    先说说我遇到的实际情况吧。
 
    我们开发中在对数据库插入操作这一块,使用了JavaBean去映射数据库中表,JavaBean中的一个属性对应数据库中的一个字段,插入数据就是将JavaBean中属性的值。

举个例子说明下:



插入数据过程如下:

   
    在后面的测试中,发现系统有时会蹦出一个数据库异常,最终调查发现就是因为JavaBean的内容不正确才导致的。

     我觉得这个原因主要是因为对JavaBean的创建和向JavaBean中设置内容是分离的,因为数据库中的表在创建时有些约束,像主键约束,非空约束等,而我们在设置完JavaBean中的属性以后,并不能保证由于疏忽或者其它原因导致,JavaBean内容设置的不正确,从而在DAO层,插入数据库是就会失败。

    像上面这种错误,在编码阶段就应该避免,正因为上面那种设计才滋生的那种错误。如果我们能将创建JavaBean和设置内容揉在一起,并在当中增加相应的检查,就可以避免这些问题的发生,将Oracle错误转换成Java异常,然后交给try-catch块去处理。

Student表的结构如下:


下面这是利用builder模式设计的Java类:
public class Student {
	private String id;
	private String name;
	private String sex;
	private int age;
	private String department;

	public static class Builder {
		/*
		 * 只能指定一次。
		 */
		private final String id;
		private final String department;

		private String name = "";
		private String sex = "男";
		private int age = 20;

		/*
		 * 非空属性,必须在构造器中指定。
		 */
		public Builder(String id, String department) {
			this.id = id;
			this.department = department;
		}

		/*
		 * name,sex,age可选择属性,提供特殊的setter方法。
		 */
		public Builder name(String name) {
			this.name = name;
			return this;
		}

		public Builder sex(String sex) {
			this.sex = sex;
			return this;
		}

		public Builder age(int age) {
			this.age = age;
			return this;
		}

		/*
		 * Student对象创建器,想得到一个Student对象必须使用build 方法,
		 * 在方法中增加对Builder参数的验证,并以异常的形式告诉给开发人员。
		 */
		public Student build() {
			/* 检查Builder对象中的数据是否合法。
			 * 针对这个例子,就是检查主键冲突,外键制约等
			 * 如果不满足我们可以抛出一个IllegalArgumentException
			 */
			return new Student(this);
			
		}
		
	}

	private Student(Builder builder) {
		this.id = builder.id;
		this.name = builder.name;
		this.sex = builder.sex;
		this.age = builder.age;
		this.department = builder.department;
	}

	/*
	 * 只提供getter方法
	 */
	public String getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public String getSex() {
		return sex;
	}

	public int getAge() {
		return age;
	}

	public String getDepartment() {
		return department;
	}

}


使用Builder模式前后Student对象创建的变化。


    现在创建一个Student对象,只能像这样了:
    Student.Builder builder = new Student.Builder("03041013", "计算机");
    builder.name("李华");
    Student student = builder.build();

或者
     student = new Student.Builder("03041013", "计算机").name("李华").build();


   如果你在传入builder中的参数不合乎业务或者非法,那么就不能创建student对象,这时候你可以通过捕获IllegalArgumentException,从而得知失败的原因。

    引入Builder设计模式以后,代码保持JavaBean好的可读性,但同时增强了安全性,将Student类的创建和设置内容揉在了一起,并增加了安全性检查,提高了系统的健壮性,同时防止了编码中的一些疏忽。

  • 大小: 12.1 KB
  • 大小: 9.2 KB
  • 大小: 12.5 KB
  • 大小: 11.8 KB
0
3
分享到:
评论

相关推荐

    Builder模式在Java中的应用

    在设计模式中对Builder模式的定义是用于构建复杂对象的...其中使用Builder模式来替代多参数构造函数是一个比较好的实践法则。 我们常常会面临编写一个这样的实现类(假设类名叫DoDoContact),这个类拥有多个构造函数,

    设计模式-Builder模式demo

    在Java中,Builder模式通常包含四个主要角色:Product(产品),Builder(建造者),ConcreteBuilder(具体建造者)和Director(导演)。Product是被构建的对象,Builder定义了产品的构造接口,ConcreteBuilder实现...

    23种设计模式的java实现-Builder

    理解并熟练运用Builder模式对于提升Java编程能力、优化代码结构以及处理复杂对象的创建具有重要意义。通过将构建逻辑封装在Builder中,我们可以更容易地改变产品的构造过程,同时保持客户端代码不变,符合开闭原则。...

    【Java面试题】builder模式

    【Java面试题】builder模式

    java builder 模式之贷款办理

    在"Java Builder 模式之贷款办理"这个主题中,我们可以深入理解如何利用Builder模式来创建复杂贷款申请流程的实例。 Builder模式通常由四个主要角色组成:Product(产品),Builder(建造者),ConcreteBuilder...

    【Java 设计模式-源码】Builder 模式:在 Java 中清晰构建自定义对象

    在 Java 开发中,Builder 模式是一种强大的创建型模式,它允许我们逐步构建复杂的对象。本文将详细介绍 Builder 模式的意图、解释、编程示例、适用场景以及实际应用。同时,还将提供示例代码的下载链接,方便读者...

    Java的Builder模式生成器FreeBuilder.zip

    FreeBuilder为 Java 1.6 自动生成 Builder 模式。当设计类的构造函数或静态工厂具有多个参数时,Builder 模式是一个不错的选择。—— Effective Java,第二版,第39页背景在 Java 中实现 Builder 模式容易出错和...

    (创建型模式)Builder模式

    在Java中,Builder模式的一个经典例子是`java.util.StringBuilder`和`java.lang.StringBuffer`,它们提供了链式操作的方法来构建字符串,如`append()`,`insert()`等,这样用户可以逐步添加内容,而无需一次性提供...

    设计模式之建造者Builder模式

    **建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...

    Java中Builder模式的实现详解

    在Java中,Builder模式通常用来处理那些具有大量可选参数的对象,避免了使用长参数列表或者复杂的构造函数。 在Java 8之前,Builder模式的实现通常涉及以下步骤: 1. 定义一个`Order`类,包含多个属性如`code`、`...

    builder设计模式源码

    在Java或者其他面向对象编程语言中,Builder模式经常被用来提高代码的可读性和可维护性。 Builder模式的核心包括四个角色:Product(产品类)、ConcreteBuilder(具体建造者)、Builder(抽象建造者)和Director...

    Java Builder模式构建MAP/LIST的实例讲解

    在 Java 中,可以使用静态内部类来实现 Builder 模式。在上面的示例代码中,我们可以看到,MapBuilder 和 ListBuilder 都是使用静态内部类来实现的。Builder 类负责构建 Map 或 List 对象,而 MapBuilder 和 ...

    java设计模式之Builder&Decorator

    Java设计模式中的Builder模式和Decorator模式是两种重要的设计模式,它们在软件开发中起到优化代码结构、提高代码复用性和灵活性的作用。 1. 建造者模式(Builder) 建造者模式是一种创建型设计模式,它的主要目的...

    powerbuilder_call_java

    10. **设计模式**:使用适当的设计模式可以帮助更好地组织代码,例如工厂模式用于创建Java对象,代理模式用于控制对Java代码的访问。 通过理解和掌握上述知识点,开发者可以有效地将PowerBuilder和Java结合,创建出...

    FreeBuilder为Java1.6 自动生成 Builder模式

    在Java编程中,FreeBuilder是一个自动化工具,它可以帮助开发者为Java 1.6及更高版本的类自动生成Builder模式的实现。这个工具极大地简化了代码的编写,避免了手动创建和维护复杂的构造函数或工厂方法。 Builder...

    Java设计模式:Builder模式应用案例[整理].pdf

    // 使用Builder模式创建对象 NutritionFacts nf1 = new NutritionFacts.Builder() .servingSize(20) .servings(100) .build(); NutritionFacts nf2 = new NutritionFacts.Builder() .servingSize(240) ....

    Java Builder模式实现原理及优缺点解析

    Java Builder模式实现原理及优缺点解析 Builder 模式中文名为建造者模式,是一种对象创建型模式,旨在将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder 模式的定义 Builder ...

    Java设计模式:Builder模式应用案例[借鉴].pdf

    在Java编程中,Builder模式尤其适用于那些具有大量可选参数的对象创建。 在提供的代码示例中,我们看到了两种常见的创建对象的方式: 1. **构造函数链式调用**: 这种方法通过创建一系列的构造函数,每个构造函数...

    创建型——Builder模式

    此外,Builder模式在Java标准库中也有广泛应用,例如`StringBuilder`和`StringBuffer`,它们用于构建字符串,提供了一种高效且可控制的字符串构建方式。 在实际开发中,Builder模式常用于创建复杂的对象,如XML文档...

    Java设计中的Builder模式的介绍

    "Java设计中的Builder模式介绍" 在 Java 设计模式中,Builder 模式是一种常用的设计模式,它可以将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。今天,我们将通过一个 Person 例子来...

Global site tag (gtag.js) - Google Analytics