`

重叠构造器、Builder模式

 
阅读更多

   当存在做个参数时,但是有些是必选的,有些事不必选的情况下用重叠构造器、Builer模式比较好

     重叠构造器

   

public student(String name, int age){
  this(name,age,""); 
}
public student(String name, int age,String address){
  this(name,age,address,0); 
}
public student(String name, int age,String address,int telphone){
  this(name,age,address,telephone,""); 
}
public student(String name, int age,String address,int telphone,String nickname){
  this(name,age,address,telephone,nickname); 
}

 这样的话当你创建 new Student("张三",22);这样其它值就为0或“”了。

   

Builder模式

public class BuilderModel {
   private final String name;
   private final int age;
   private final String number;
   private  final String address;
   //private final String nickname;
   private final int tel;
   
   public static class Builder{
	   //必填参数
	   private final String name;
	   private final int age;
	   //可算参数
	   private String number;
	   private String address;
	   private int tel;
	   //name 和age 为必填参数
	   public Builder(String name ,int age){
		   this.name = name;
		   this.age = age;
	   }
	   //可选参数方法池
	   public Builder setNumber(String val){
		    this.number =val; 
		    return  this;
	   }
	   public Builder setAddress(String val){
			this.address = val ;
			return this;		
	   }
	   public Builder setTel(int val){
		    this.tel = val;
		    return this;
	   }
	   public BuilderModel buid(){
		   return new BuilderModel(this);
	   }
	   
   }
   
	private BuilderModel(Builder builder){
		this.name = builder.name;
		this.age = builder.age;
		//this.nickname = b
		this.address = builder.address;
		this.number = builder.number;
		this.tel = builder.tel;
	   
	}

	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        BuilderModel model = new BuilderModel.Builder("zs",22).setAddress("北京朝阳区").setNumber("12345").setTel(110).buid();
	    System.out.println(model.name+model.age);
	    //model.age = 2;  final type should not be asigned again!
	}
}

 

这样 对于每个参数都比较清晰明了,更加易读,有人可能会问为什么不用对象封装属性,因为用对象封装属性当作参数的时候,不能确定它的不变动性(即比如你打算第一个方法调用 Student 对象,下面又有一个方法调Student对象,但是当你在第一个方法里面如果对Student 对象做了修改的话,那样后面一个也就跟着修改了,因为是同一个引用)

例如

public class BuilderModel {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		BuilderModel.Student stu = new BuilderModel.Student("张三",22);
		method1(stu);
		method2(stu);		
	}
	public static class Student{		
		public  String name;
		public int age;
        public Student(String name,int age){
		   this.name = name;
		   this.age = age;
 		}
	}
	public static void method1(Student stu){
	   stu.name = "李四";	
	}
	public static void method2(Student stu){
	   System.out.println(stu.name);
	}
	
}

 

对于方法中的参数是对象时,前面加final是不影响修改这个对象里面的方法的。

 

 如有任何缺陷请大家不吝赐教,必当洗耳恭听!

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
1 楼 xurichusheng 2012-01-12  
    不直接诶生成想要的对象,而是让客户端利用所有必要的参数调用构造器(或者静态工厂),得到一个builder对象。
    然后客户端在builder对象上调用类似于setter的方法,来设置每个相关的可选参数。
    最后,客户端调用无参的build方法来生成不可变的对象。

相关推荐

    Java设计中的Builder模式的介绍

    今天,我们将通过一个 Person 例子来分析重叠构造器模式、Builder 模式的使用场景,以及运用 JavaBeans 模式弥补重叠构造器模式的不足。 首先,让我们了解什么是 Builder 模式。Builder 模式是一种 creational 设计...

    c++Builder下的USB设备中断模式访问

    7. **异步处理**:为了实现中断模式,你需要使用重叠I/O结构(如`OVERLAPPED`结构体),并配合事件或I/O完成端口来处理异步数据传输,确保实时性。 8. **错误处理和资源释放**:在操作完成后,记得关闭设备句柄,并...

    重叠相加和重叠保留算法的MATLAB实现

    重叠相加和重叠保留算法的MATLAB实现

    block_match.zip_block match_图像分块_图像重叠分块_图像重叠度_重叠分块

    本篇将深入探讨"图像分块"、"图像重叠分块"、"图像重叠度"和"重叠分块"的概念,并通过描述中的 "block_match.m" 文件,我们可以推测这是一个用 MATLAB 编写的脚本,用于实现这些功能。 1. **图像分块**: 图像分块...

    重叠相加法与重叠保留法

    ### 重叠相加法与重叠保留法详解 #### 一、卷积与快速傅里叶变换(FFT) 在数字信号处理领域中,卷积是处理信号的基本操作之一,尤其是在滤波器设计中有着广泛的应用。对于长度为\(N\)和\(M\)的两个序列\(x[n]\)和...

    用matlab分析重叠相加、重叠保留法.docx

    数字信号处理中的重叠相加法和重叠保留法是两种常用的快速计算线性卷积的方法。在 Matlab 中实现这些方法可以使用 FFT 和 IFFT 进行快速卷积计算。本文将对这两种方法进行详细的分析和比较,并提供了 Matlab 实现...

    Effective-Java读书笔记(上)

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

    串口的串行通讯与重叠IO

    这个函数接受一系列参数,如文件名、访问模式、共享模式、安全属性、创建方式、文件属性和标志以及模板文件句柄。例如,要打开串口"COM1",可以使用类似于以下的代码: ```cpp HANDLE hSerial = CreateFile("COM1",...

    PowerBuilder 打印条码,并非常容易被扫描枪读取。

    - 布局:条码在报表上的位置应避免与其它图形元素重叠,保持足够的边距。 五、测试与优化 完成以上步骤后,进行多次打印测试,使用不同类型的扫描枪进行扫描,确保在各种条件下都能成功读取。根据测试结果对代码和...

    2D图片重叠.rar

    这种效果可以是简单的覆盖,也可以是复杂的效果如混合模式,使得重叠部分产生不同的视觉效果。在编程中,这通常涉及到图像处理库的使用,例如在易语言中,我们可以使用内置的图像操作函数或第三方库来实现。 易语言...

    lcy11_12_重叠保留法和重叠相加法计算卷积_重叠相加_重叠相加法_

    本主题主要探讨如何利用MATLAB实现两种常见的卷积计算方法:重叠保留法(Overlap-Save Method)和重叠相加法(Overlap-Add Method)。这两种方法在处理长序列或实时信号时,由于其内存效率和计算效率的优势,被广泛...

    重叠文字避让_CAD文字避让_cad重叠_文字避让_

    在CAD(计算机辅助设计)软件中,重叠文字避让是一项关键功能,它涉及到图形中的文字排列和组织,确保文字清晰可读,不被其他图形元素遮挡。CAD文字避让通常是指在二维绘图环境中,自动或手动调整重叠的文字,使其...

    重叠文字避让_CAD文字避让_cad重叠_文字避让_CAD插件_cad避让_

    然而,在绘制过程中,经常会出现文字重叠的问题,这不仅会影响图纸的整洁性,还可能导致重要的信息被遮挡,进而给施工、审核等后续环节造成麻烦。 为了解决这一普遍存在的问题,开发了一款专门的CAD插件——“重叠...

    自动获取两幅图像有效区域重叠范围.zip_envi_idl envi_图像重叠区域_重叠区域 IDL

    ENVI 插件,利用idl自动获取两个影像重叠范围,带源代码,方便修改

    Matlab重叠相加法代码

    2.代码有注释,修改输入...3.本代码实现的重叠相加法与Matlab自带的卷积函数进行了对比,保证正确性。 4.本代码只适用于将x(n)刚好分为整数段的情况,因此要设计好每一段长度。 5.带有重叠相加法和本代码的介绍文章。

    重叠社区划分数据集

    通过对这个网络进行重叠社区划分,我们可以找出具有相似比赛模式的球队群体,进一步理解它们之间的竞争和合作关系。 接着是“卡特武术”(karate)网络,这是一个由社会学家Zachary在70年代记录的武术俱乐部成员间...

    重叠文字避让.rar_CAD尺寸避让_cad 避让_cad中文字避让_cad文字_cad避让重叠

    标题“重叠文字避让.rar_CAD尺寸避让_cad 避让_cad中文字避让_cad文字_cad避让重叠”暗示了这个压缩包包含的内容是关于如何在CAD软件中处理文字和图形的重叠问题,以实现有效的避让策略。描述提到“让cad图形中,...

    重叠相加法和重叠保留法

    ### 重叠相加法与重叠保留法在MATLAB中的实现 #### 一、引言 在数字信号处理领域,卷积运算是一项基础而重要的技术。它在滤波、图像处理、通信等多个方面有着广泛的应用。对于长序列的卷积,直接计算不仅效率低下...

Global site tag (gtag.js) - Google Analytics