使用静态工厂方法代替构造器和构建器使用
来源:互联网 发布:ubuntu 12.04 163源 编辑:程序博客网 时间:2024/05/20 00:10
根据《Effective Java》本书,加上自己的一些理解。
好处:1.静态工厂方法有自己的方法名称。(没必要和类名一样,不容易区分)。
2.因为是静态的,所以不用每次调用它们的时候都创建一个新的对象。
3.可以返回原返回类型的任何子类型(例如:本来你这个构造方法是返回的是自身的一个对象,但是你现在也可以返回当前类的一个子类对象),这样做就更加灵活。
4.创建参数化类型实例的时候,能够代码简洁,更清晰(例如:Map<String,List<String>> m= new hashMap<String, List<String>>(1); 可以提供静态工厂方法:
public static <K,V> hashMap<k,v> new Instance(int length){
return new HashMap<K,V>(length);
}
缺点:类如果不含有公有的或者受保护的构造器,就不能被子类初始化。(例:如果涉及到有父子关系的,并且是私有化的就不能够被子类初始化)
构建器:可以理解成为建造者模式
如果遇到了多个构造器参数时候,就可以考虑使用建造者模式了。
例:
public class person{
private String name;
private int age;
------默认提供get,set方法
}
加入person中有多个参数,我们有的时候只是需要对其中的几个字段进行赋值。那这种情况,我么咋办呢?
1.new一个对象,set哪些字段就好了。
2.创建对象的时候,使用构造方法(参数不同)
第一种做法,用的地方很多的时候,就会导致很多重复性的代码,可维护性差。
第二种做法,构造方法太多。到最后很难维护。
个人解决方案:
1.在原有类中,加入一个静态内部类。用来做创建者的事情。
2.在内部类中,申明和外部类同样的字段,并且get,set
3.把内部类的每个属性都做成方法,返回值是内部类
4.内部类中提供build方法,new 外部类(this);
5.在外部类提供一个构造方法,参数是内部类。把内部类的属性值赋值给外部类
6.在外部使用。例: Person per=new Person.man().age(21).sex("男").build();就可以生成一个符合自己要求的例子。
今天就分享到这里,纯手工打字。希望对于大家能够有帮助。谢谢!!!
- 使用静态工厂方法代替构造器和构建器使用
- 考虑使用静态工厂方法代替类的构造器
- 考虑使用静态工厂方法代替构造器
- 【代码优化】考虑使用静态工厂方法代替构造器
- 考虑使用静态工厂代替构造器
- 构建器使用举例-静态工厂和构造器的替代方法
- 用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 静态工厂方法代替构造器
- Effective Java 1:考虑使用静态工厂方法代替构造器
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- 第1条:使用静态工厂的方法来代替构造器
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- Effective Java 学习笔记 使用静态工厂方法代替构造器
- 高效Java01:考虑使用静态工厂方法代替构造方法
- 1、考虑使用静态工厂方法代替构造函数。
- 逃离迷宫
- Git和Github的关系以及简单应用
- ck防止黑客修改其他用户数据
- 2017年8月IT互联网大会时间表出来啦!赶紧看
- python基础之集合
- 使用静态工厂方法代替构造器和构建器使用
- HDOJ1010 Tempter of the Bone(DFS+奇偶剪枝)
- bzoj 1270: [BeijingWc2008]雷涛的小猫 dp
- C++的重载,覆盖以及隐藏
- Android图表控件MPAndroidChart的简单介绍(MPAndroidChart3.0)
- windows 7 python3.4 安装scrapy与常见错误
- SQL优化大总结之 百万级数据库优化方案
- 常见面试题 -- JAVA 小结
- sendfile零拷贝