`

多个构造器参数处理方法(effective java笔记)

    博客分类:
  • java
阅读更多
1.重叠构造器模式

public class UserTC {
/**
 * 重叠构造器模式
 * 对于参数不算太多事可以使用,用户用不到的属性设置 为默认值
 * 一句话重叠构造器可行,但是当参数过多时客户端代码难以编写,并且仍难难以阅读(引用effective java2.2)
 */
	
	private String name;
	private String user;
	private String pass;
	private char   sex;
	private int    age;
	private String email;
	private String addr;
	private String mes;
	
	/**
	 * 通过this方法逐步调用下层构造器
	 * */
	public UserTC(String name) {
		this(name, "");
	}
	public UserTC(String name, String user){
		this(name, user, "");
	}
	public UserTC(String name, String user, String pass){
		this(name, user, pass, 'F');
	}
	public UserTC(String name, String user, String pass, char sex){
		this(name, user, pass, sex, 0);
	}
	public UserTC(String name, String user, String pass, char sex, int age){
		this(name, user, pass, sex, age, "");
	}
	public UserTC(String name, String user, String pass, char sex, int age, String email){
		this(name, user, pass, sex, age, email, "");
	}
	public UserTC(String name, String user, String pass, char sex, int age, String email, String addr){
		this(name, user, pass, sex, age, email, addr, "");
	}
	
    public UserTC(String name, String user, String pass, char sex, int age, String email, String addr, String mes) {
		this.name = name;
		this.user = user;
		this.pass = pass;
		this.sex  = sex;
		this.age  = age;
		this.email = email;
		this.addr = addr;
		this.mes  = mes;
	}
}

2.javabeans模式
  public class UserBean {
	/**
	 * javabeans模式
	 * 优点:克服了重叠构造器模式的缺点,创建类的实例比较容易,代码也易于阅读
	 * 缺点:构造过程通过调用方法实现,可能造成javabean处于不一致状态,调试比较困难,线程安全要付出较大的工作量
	 * 但是此模式在构造数据库映射类时用的较为广泛。 
	 * */
	private String name;
	private String user;
	private String pass;
	private char   sex;
	private int    age;
	private String email;
	private String addr;
	private String mes;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUser() {
		return user;
	}
	public void setUser(String user) {
		this.user = user;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String getMes() {
		return mes;
	}
	public void setMes(String mes) {
		this.mes = mes;
	}
	
}



3.Builder模式(构建器)
public class UserBuilder {
	/**
	 * 拥有了javabeans模式的易读性,而且拥有重叠构造器模式安全性,而且使用起来十分灵活
	 * 但其在性能较之前两种方法有点不足,总之此方法还是比较不错的
	 */
	private final String name;
	private final String user;
	private final String pass;
	private final char   sex;
	private final int    age;
	private final String email;
	private final String addr;
	private final String mes;
	public static class Builder{
		private String name;
		private String user;
		private String pass;
		private char   sex = 'f';
		private int    age = 0;
		private String email = "";
		private String addr = "";
		private String mes = "";
		public Builder(String name){
			this.name = name;
		}
		public Builder user(String value){
			user = value;
			return this;
		}
		public Builder pass(String value){
			pass = value;
			return this;
		}
		public Builder sex(char value){
			sex = value;
			return this;
		}
		public Builder age(int value){
			age = value;
			return this;
		}
		public Builder email(String value){
			email = value;
			return this;
		}
		public Builder addr(String value){
			addr = value;
			return this;
		}
		public Builder mes(String value){
			mes = value;
			return this;
		}
		
		public UserBuilder builder(){
			return new UserBuilder(this);
		}
		
    }
	private UserBuilder(Builder builder){
		this.name = builder.name;
		this.user = builder.user;
		this.pass = builder.pass;
		this.sex = builder.sex;
		this.age = builder.age;
		this.email = builder.email;
		this.addr = builder.addr;
		this.mes = builder.mes;	
	}
}



4.三种方法的调用
 
   public class Main {
	 /**
	 * 多参数类的使用
	 * @param args
	 */
    public static void main(String args[]){
    	testUserBuilder();
    	testUserBean();
    	testUserTC();
    }
    public static void testUserBuilder(){
    	UserBuilder userBuilder = new UserBuilder.Builder("jack").user("jack").
    			                  pass("jack").sex('f').age(20).addr("china").
    			                  email("jack@126.com").mes("java").builder();
    	System.out.println(userBuilder);
    }
    public static void testUserBean(){
    	UserBean userBean = new UserBean();
    	userBean.setAddr("china");
    	userBean.setAge(20);
    	userBean.setEmail("jack@126.com");
    	userBean.setMes("java");
    	userBean.setName("jack");
    	userBean.setPass("jack");
    	userBean.setSex('f');
    	userBean.setUser("jack");
    	System.out.println(userBean);
    }
    public static void testUserTC(){
    	UserTC userTC = new UserTC("jack");
    	System.out.println(userTC);
    }
  



  总的来说builder拥有javabean和重叠构造器的优点但在性能上有些缺陷
  另外javabean模式在处理数据库映射时也是不可或缺的
  详见effectivejava(第二版)
分享到:
评论

相关推荐

    Effective Java读书笔记.pdf

    Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展可追溯到1991年,当时由...

    effective java 读书笔记

    《Effective Java》是Java开发领域的经典著作,作者...以上仅是《Effective Java》的部分内容,书中还有更多关于枚举、泛型、集合、多线程等方面的重要指导,都是Java开发者提升代码质量、遵循良好编程习惯的宝贵资源。

    java 构造器的调用

    在Java编程语言中,构造器(Constructor)是一个特殊的方法,主要负责对象的初始化工作。当创建一个新的类实例时,构造器会被自动调用。构造器的名称必须与类名完全相同,且没有返回类型,包括void。理解并熟练运用...

    Effective Java第三版1

    2. **构建器(Builder pattern)**:当类有多个构造器参数时,构建器模式提供了一种更清晰的构造对象的方式,避免了“参数过多”的问题。 3. **单例模式**:通过私有构造器和枚举类型强化单例属性,确保线程安全且...

    effective-java.pdf

    1. 静态工厂方法与构造方法的区别:在Java中,构造方法用于创建类的实例,它与类同名并可拥有参数。而静态工厂方法是一个类中的公共静态方法,它返回该类的实例。不同于构造方法,静态工厂方法有特定的名称,并且...

    effectiveJava的笔记

    以上只是《Effective Java》笔记中可能包含的部分关键知识点,实际笔记会更详细地探讨每个主题,并给出具体的代码示例和实践建议。通过深入学习这些内容,开发者可以提升自己的Java编程技艺,编写出更加高效、可维护...

    Effective Java.docx

    **重叠构造器模式**:这种方法提供了多个构造器,每个构造器接受不同数量的参数。虽然解决了某些问题,但在参数较多时会导致构造器数量激增,使代码难以维护。 **JavaBeans模式**:通过无参构造器创建对象,然后...

    尚硅谷JAVA基础笔记吐血整理

    构造器可以重载,即在同一个类中可以定义多个构造器,它们的参数列表不同。 【this关键字】 this关键字代表当前对象的引用,可以用来区分成员变量和方法形参之间的冲突,调用成员变量、方法和构造器。 【包...

    Java入门理解构造器

    - **自定义构造器**:开发者可以根据需求定义一个或多个构造器来满足不同的初始化需求。自定义构造器可以是带参数的,也可以是无参数的。 #### 三、构造器的作用 构造器的作用主要体现在以下几个方面: - **初始...

    java笔记 java笔记

    方法重载是指在同一类中定义多个同名方法,但参数列表不同。 #### 7. 高级语言特性 ##### 7.1 封装 封装是OOP的一个基本原则,旨在保护对象的状态,并通过公共接口提供对外部的访问。 ##### 7.2 继承 - **继承...

    《Effective Java》读书分享.pptx

    Builder 模式是一种构建对象的方法,不直接生成想要的对象,而是利用必要参数调用构造器(或者静态工厂)得到一个 builder 对象,然后在 builder 对象上调用类似 setter 的方法,设置可选参数,最后调用无参的 build...

    构造方法JAVA构造方法

    - **默认构造器**:当用户没有定义任何构造器时,Java会提供一个无参数的默认构造器。它执行基本的初始化,如将成员变量设置为默认值。 - **自定义构造器**:用户可以根据需要定义带参数的构造器,以实现更复杂的...

    Effective-Java读书笔记

    3. **优先考虑静态工厂方法而非构造器**:静态工厂方法比公有构造器更灵活,它们不需要在每次实例化时都创建一个新的类实例,还可以返回已缓存的实例或限制对象的创建。 4. **使用不可变对象**:不可变对象一旦创建...

    Java 构造方法

    这称为重载构造方法,即在同一个类中定义多个构造方法,它们的方法名相同,但参数列表不同。 在实际编程中,我们通常会看到以下几种情况: - **默认构造器**:如果程序员没有定义任何构造方法,Java编译器会自动...

    java读书笔记笔记笔记笔记笔记笔记

    【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...

    Effective-Java读书笔记(上)

    - **重叠构造器模式**:这种模式下,每个构造器提供比前一个多一个参数,但是这种模式会导致构造器过多,增加复杂度。 - **JavaBeans模式**:虽然使用无参构造器并结合setter方法看起来简单,但可能导致对象状态的不...

    理解构造器--构造器和方法的区别

    在Java编程语言中,构造器和方法是两个核心概念,它们在类的定义和对象的创建中起着至关重要的作用。然而,它们之间存在着显著的差异,这些差异是理解面向对象编程的关键。 首先,构造器的主要功能是初始化一个新...

    Effective java 3 学习记录.docx

    * of 方法:是一个聚合方法,接受多个参数并返回该类型的实例,并把他们合并在一起,例如:Set faceCards = EnumSet.of(JACK, QUEEN, KING); * valueOf 方法:from 和 to 更为详细的替代方式,例如:BigInteger ...

Global site tag (gtag.js) - Google Analytics