`

设计模式——Builder

 
阅读更多
package jzone.designpatern.builder;

public class User {
	private int id;
	private String name;
	private int sex;
	private int door;
	private String address;

	public User(Builder builder) {
		id = builder.id;
		name = builder.name;
		sex = builder.sex;
		door = builder.door;
		address = builder.address;
	}

	public void print() {
		System.out.print("User " + name + " 's id is " + id + " , sex is "
				+ (sex == 0 ? "Male" : "Female") + " , door is " + door
				+ " , address is " + address + ".");
	}

	public static class Builder {
		// Unchangeable Parameters
		private final int id;
		private final String name;

		// Changeable Parameters
		private int sex;
		private int door;
		private String address;

		public Builder(int id, String name) {
			this.id = id;
			this.name = name;
			sex = 0;
			door = 0;
			address = null;
		}

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

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

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

		public User build() {
			return new User(this);
		}
	}
}


package jzone.designpatern.builder;

public class BuildStudent {
	public static void main(String[] args) {
		User stu = new User.Builder(2010, "Hesey").sex(0).door(10)
				.address("Software College").build();
		stu.print();
	}
}

 

采用构造函数的方式来对对象的参数进行初始化带来的问题是可读性很差,必须很清楚构造函数中各个参数是什么及其顺序,程序员或许会知道这可能是在创建一个用户对象并作其参数的初始化,但是参数究竟意味着什么,就必须去看源代码或是查阅文档

 

可读性更强的解决方案——通过一连串的get,set方法对参数进行获取或设置,各个参数的初始化被放到了不同的方法调用中,这会导致严重的线程不安全问题(构造函数则不存在这个问题)。对象在一连串的set方法中,可能会出现状态不一致的情况

 

Builder模式则是兼具了构造函数的线程安全性和JavaBeans可读性优点。其主要原理是在类的内部构造一个内部类——Builder类,Builder类通过类似set的方法对参数进行初始化,最后调用build()方法创建其所属类的新对象并将其自身返回给这个新对象,一次性完成构造工作。

 

构造函数构造了两个必要的参数(学号和姓名)之后,可以用类似于JavaBeans的set方法来初始化参数,事实上这种方式比set更为清晰明了,有如直接访问对象参数一般(实际还是方法调用)。

在构造复杂对象时,建议采用这种方式。

分享到:
评论

相关推荐

    创建型——Builder模式

    Builder模式是一种创建型设计模式,它提供了一种创建对象的灵活方式,将对象的构建过程与表示分离。这种模式在复杂对象的构造过程中特别有用,因为它允许我们通过不同的步骤来构造对象,而不会让客户端代码受到这些...

    设计模式——建造者模式

    建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...

    设计模式——可复用面向对象软件的基础(1)

    在《设计模式——可复用面向对象软件的基础》这本书中,作者Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(合称GoF)首次提出了23种面向对象设计模式。这些模式涵盖了不同设计场景,如创建型模式、...

    C#面向对象设计模式纵横谈

    接下来,我们将进一步探索另一种创建型设计模式——Builder模式。 ### Builder模式简介 Builder模式是一种软件设计模式,它允许将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种...

    设计模式——可复用面向对象软件的基础(3)

    《设计模式——可复用面向对象软件的基础》是IT领域中的经典著作,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师合著,他们因此被誉为GoF(Gang of Four)。这本书提出了面向对象设计的23种...

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    23种 设计模式---面向对象的基本原则

    设计模式是软件工程中的一种最佳实践,它们是解决常见编程问题的经验总结,为软件开发提供了可复用的解决方案。在面向对象编程中,设计模式基于一些基本原则,这些原则构成了良好设计的基础。本篇将深入探讨23种设计...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    设计模式精解——GoF23中设计模式解析

    ### 设计模式精解——GoF23中设计模式解析 #### 重要性与起源 设计模式是软件工程领域的一项重要研究,它提供了一系列解决常见软件设计问题的模板。GoF23指的是由Erich Gamma、Richard Helm、Ralph Johnson和John ...

    设计模式与泡MM——设计模式入门教程

    ### 设计模式与泡MM——设计模式入门教程 #### 一、创建型模式 ##### 1、FACTORY(工厂模式) 工厂模式的核心在于定义了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂模式让类的实例化延迟到子类中...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)_《0528》.rar

    《设计模式--基于C#的工程化实现及扩展》是一本深入探讨软件设计模式的书籍,作者王翔通过C#语言来阐述各种设计模式的工程化应用和拓展。设计模式是软件开发中的一种最佳实践,它总结了在特定场景下解决常见问题的...

    【设计模式】- 生成器模式(Builder)(csdn)————程序.pdf

    生成器模式,也称为建造者模式,是一种设计模式,用于创建复杂对象,它允许你按照一系列步骤来构造对象,而这些步骤可以通过不同的实现来产生不同形式的对象。生成器模式的核心在于分离了对象的构造过程和表示细节,...

    设计模式实现——创建者模式

    创建者模式,也被称为构造器模式,是一种设计模式,它提供了创建对象的统一接口,隔离了客户端代码与对象的创建细节,使得系统更加灵活,易于维护。这种模式主要用于当一个对象的构建与其表示分离时的情况。 创建者...

    设计模式C#实例——大洋系统

    "设计模式C#实例——大洋系统"这个主题涵盖了五个经典的设计模式:抽象工厂(Abstract Factory)、适配器(Adapter)、桥接(Bridge)、建造者(Builder)以及责任链(Chain of Responsibility)。接下来,我们将...

    Java 设计模式-建造者模式(Builder)Android讲解

    总结来说,Java的设计模式——建造者模式在Android开发中扮演着重要角色,它帮助我们构造复杂对象,提供了一种模块化、易扩展的代码结构,提高了代码的可读性和可维护性。通过理解并熟练运用建造者模式,开发者可以...

    设计模式源码.zip

    最后,"设计模式——基于C#的工程化实现及扩展_示例说明.txt"文件提供了对源码的解释和应用场景的描述,这对于初学者来说是极其宝贵的资源。它可以帮助你理解每个模式的意图、适用场景以及如何在C#代码中正确地引入...

    设计模式设计模式设计模式

    标题“设计模式设计模式设计模式”强调了这个主题的核心——设计模式的重要性及其反复应用。描述“设计模式设计模式设计模式设计模式设计模式设计模式”进一步突出了设计模式在软件开发中的不断重复和不可或缺的角色...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 ##### 0.1 设计模式解析(总序) 设计模式是面向对象编程中用于解决常见问题的一系列模板。它们为软件设计提供了标准化的解决方案,帮助...

Global site tag (gtag.js) - Google Analytics