当存在做个参数时,但是有些是必选的,有些事不必选的情况下用重叠构造器、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 模式弥补重叠构造器模式的不足。 首先,让我们了解什么是 Builder 模式。Builder 模式是一种 creational 设计...
- **重叠构造器模式**:这种模式下,每个构造器提供比前一个多一个参数,但是这种模式会导致构造器过多,增加复杂度。 - **JavaBeans模式**:虽然使用无参构造器并结合setter方法看起来简单,但可能导致对象状态的不...
**重叠构造器模式**:这种方法提供了多个构造器,每个构造器接受不同数量的参数。虽然解决了某些问题,但在参数较多时会导致构造器数量激增,使代码难以维护。 **JavaBeans模式**:通过无参构造器创建对象,然后...
汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder 模式就是将这两 种情况分开进行。 设计模式之 Prototype(原型) 用原型实例指定创建对象的种类,并且通过拷贝这些...
使用重叠构造器; 使用Build模式【构建器】: new A.Build().set.set.build(); Build模式也适用于类层次结构 递归类型参数 /* * 递归类型参数: java 没有self,为了子类能返回正确的类型【即类型为Build的子类】 * *...
5. 建造者模式(Builder):将复杂对象的构建与表示分离,使同样的构建过程可以创建不同的表示。 四、数据结构 1. 链表(LinkedList):动态数据结构,通过节点链接进行数据存储。 2. 栈(Stack):后进先出(LIFO...
- JVM通过垃圾回收器自动管理内存,回收不再使用的对象所占用的内存空间。 - 主要有四种常用的垃圾收集算法:标记-清除算法、复制算法、标记-整理算法和分代收集算法。 - GC分为年轻代和老年代,年轻代中的对象...