构造器模式
来源:互联网 发布:131458淘宝信誉查询网 编辑:程序博客网 时间:2024/06/06 12:49
当创建对象需要传入多个参数的时候我们通常会根据参数的数量写不同的构造器,具体如下
public A(int a){}
public A(int a, int b){}
public A(int a, int b, int c){}
根据不同的参数调用不同的构造器,但是当参数多了的时候,这种方式不够灵活,所以会实现动态传参的方法
public A(){}
public void seta(int a){}
public void setb(int b){}
public void setc(int c){}
这种方式提高了传参的可读性,也提高了传参的灵活性,但是会增加代码行数,同时在多线程异步执行的时候导致奇怪的错误。
有没有办法解决呢?既能提高代码可读性,提高参数灵活性,又不会增加代码行数,并保证线程安全呢?
构建器模式登场,先看代码:
public class A {
private int a;
private int b;
private int c;
public static class Builder {
private int a;
private int b;
private int c;
public Builder(){}
public Builder seta(int a) { this.a = a; return this}
public Builder setb(int b) { this.b = b; return this}
public Builder setc(int c) { this.c = c; return this}
public A build() { return new A(this)}
}
转载自:http://blog.csdn.net/h3c4lenovo/article/details/38687023
private A(Builder builder) {
this.a = builder.a;
this.b = builder.b;
this.c = builder.c;
}
}
调用构造方法:
A a = new A.Builder().seta(1).setb(2).setc(3).build();
这样就解决了以上所说的问题,但是他的缺点同样也是存在的,就是:
1.构造器写起来很复杂
2.创建对象开销比较大
所以构建器模式只适用于需要传入很多种情况参数的时候,比如大于4种参数的配合,才比较划算。
而且值得注意的是:最好在类的设计之初就考虑是否使用构建器,否则日后扩展起来新构建器旧构造器一起用维护起来不方便。
public A(int a){}
public A(int a, int b){}
public A(int a, int b, int c){}
根据不同的参数调用不同的构造器,但是当参数多了的时候,这种方式不够灵活,所以会实现动态传参的方法
public A(){}
public void seta(int a){}
public void setb(int b){}
public void setc(int c){}
这种方式提高了传参的可读性,也提高了传参的灵活性,但是会增加代码行数,同时在多线程异步执行的时候导致奇怪的错误。
有没有办法解决呢?既能提高代码可读性,提高参数灵活性,又不会增加代码行数,并保证线程安全呢?
构建器模式登场,先看代码:
public class A {
private int a;
private int b;
private int c;
public static class Builder {
private int a;
private int b;
private int c;
public Builder(){}
public Builder seta(int a) { this.a = a; return this}
public Builder setb(int b) { this.b = b; return this}
public Builder setc(int c) { this.c = c; return this}
public A build() { return new A(this)}
}
转载自:http://blog.csdn.net/h3c4lenovo/article/details/38687023
private A(Builder builder) {
this.a = builder.a;
this.b = builder.b;
this.c = builder.c;
}
}
调用构造方法:
A a = new A.Builder().seta(1).setb(2).setc(3).build();
这样就解决了以上所说的问题,但是他的缺点同样也是存在的,就是:
1.构造器写起来很复杂
2.创建对象开销比较大
所以构建器模式只适用于需要传入很多种情况参数的时候,比如大于4种参数的配合,才比较划算。
而且值得注意的是:最好在类的设计之初就考虑是否使用构建器,否则日后扩展起来新构建器旧构造器一起用维护起来不方便。
0 0
- 构造器模式构造对象
- 构造器模式 BuilderPattern
- 构造器模式
- JavaScript的构造器模式
- 设计模式-builder(构造器模式)
- 设计模式-builder(构造器模式)
- 多个构造参数考虑使用Builder构造器模式
- 设计模式学习---Builder(构造器)
- java设计模式---builder---构造器
- Builder构造器模式示例学习
- 设计模式之构造器Builder
- 多参构造器与Builder模式
- java_可变参数构造器 Bulder模式
- 便利构造器、单件模式
- Scala模式匹配下提取器构造
- Builder模式处理多个构造器
- js之构造器模式(Constructor)
- JS——Constructor(构造器)模式
- 稀疏矩阵存储及转置
- Codeforces-285C-Building Permutation
- c、 c++、 java 基本数据类型 对比辨析
- Hello!
- 什么时候用HBase
- 构造器模式
- 【java】异常处理
- poj2392(多重背包dp,可行性类型O(nm)复杂度的解法。)
- 在eclipse中关联spring的源码
- 用flask开发个人博客(10)—— Jinja2模板中的控制结构
- Inequalities - Holder's inequality
- 出现( linker command failed with exit code 1)错误总结
- Android之自定义阴影效果
- C# using