当存在做个参数时,但是有些是必选的,有些事不必选的情况下用重叠构造器、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是不影响修改这个对象里面的方法的。
如有任何缺陷请大家不吝赐教,必当洗耳恭听!
分享到:
相关推荐
主要介绍了从一个Person例子进行分析重叠构造器模式、Builder模式的使用场景以及运用JavaBeans模式弥补重叠构造器模式的不足
重叠相加和重叠保留算法的MATLAB实现
利用matlab使用重叠保留法和重叠相加法计算卷积
2.代码有注释,修改输入...3.本代码实现的重叠相加法与Matlab自带的卷积函数进行了对比,保证正确性。 4.本代码只适用于将x(n)刚好分为整数段的情况,因此要设计好每一段长度。 5.带有重叠相加法和本代码的介绍文章。
一、实验简介 二、模式限定修饰 三、重叠模式定义 四、实验总结
实现图像的不重叠分块,以及分块相似度的计算
主要讲解长度列与短序列卷积算法(或相关算法),重叠保留法和重叠相加法,通过公式推导其计算原理
matlab重叠相加法、重叠保留法代码
CAD文字相互重叠的文字,加载此插件可以相互文字避让。快捷健:td
MATLAB中的fft的重叠相加法和重叠保留法的实现
简单计算矩形的重叠率,通过提供俩矩形对角线的俩个点的坐标来计算。适合重叠区域也为矩形的,其中重叠率的计算与通常计算不同。
jQuery图片重叠效果制作5张图片重叠切换效果代码 jQuery图片重叠效果制作5张图片重叠切换效果代码 jQuery图片重叠效果制作5张图片重叠切换效果代码 jQuery图片重叠效果制作5张图片重叠切换效果代码
首先利用Harris角点检测法得到重叠蛋白质点的角点,然后利用角点对蛋白质点进行多边形近似并判断多边形顶点的凹凸性获得凹角点,最后通过凹点选取与匹配原则从凹角点中选取凹点并构造分离线完成对重叠蛋白质点的分割...
数字信号处理,重叠相加法对输入的音频信号进行平滑滤波。
择合适的聚类数和准确划分簇间重叠的数据是聚类分析领域两个被广泛研究的问题.提出 了一个基于重叠度的层次聚类算法(CCSLM),该算法基于重叠度的衡量,而且不需要预先指定聚类数, 能够很好地解决以上两个问题....
landat影像同一景不同时期往往有些许不完全重叠,这个代码用于获取多景Landsat图像重叠部分并输出,只需要输入所有影像所在文件夹即可
方便大家计算航飞重叠度 里面可以选择大疆飞机,固定翼飞机两种模式,方便大家针对不同机型的使用。 重叠度计算经过多年航测经验计算公式得出,有国家标准辅助指导,避免大家在航飞中因重叠度不够导致的重飞。
在讲动态规划课时,我们知道可用动态规划算法求解的问题应具备的一个基本要素是子问题的重叠性质,矩阵连乘问题能用动态规划求解正是因为它具有重叠子问题。因此在解矩阵连乘问题的自顶向下的递归算法中,存在着大量...
最近做项目碰到了Fragment重叠的问题,后来通过种种方法得以解决了,所以想着总结下这个问题的解决方法,以及Android中Fragment的管理,方便自己也给有需要的朋友们提供以帮助,感兴趣的朋友们下面通过这篇文章一...