1, 什么是静态工厂方法
在 java 中, 获取一个类最简单的方法就是使用 new 关键字, 通过构造函数来实现对象的创建.
最常见的:
Date date = new Date();
不过在实际开发中, 也会经常遇到另一种获取实例的方法:
- Calendar calendar = Calendar.getInstance();
- Integer number = Integer.valueOf("3");
- Fragment fragment = MyFragment.newIntance();
像这样不通过 new, 而是用一个静态方法来对外提供自身实例的方法, 即为我们所说的静态工厂方法.
那么 new 究竟做了什么?
当我们使用 new 来构造一个新的实例时, 告诉 jvm 我们需要一个新的实例. jvm 就会自动在内存中开辟一片空间, 然后调用构造函数来初始化成员变量, 最终把引用返回调用方.
2, 静态工厂方法的优势在哪里
1) 静态工厂方法可以有名字. 对于构造方法来说, 构造方法只有一个名字, 那就是类名, 只能通过参数的类型和数量多少去区分构造方法. 而静态工厂方法可, 可以根据方法的实际功能去定义名字, 能有效使用方法.
2) 不用每次被调用时都创建新的对象. 有时候外部调用者只需要拿到一个实例, 而不关心该实例是否是新的, 那么这个时候可以提供一个单例, 如果使用工厂方法, 就可以很容易的在内部控制, 防止创建不必要的对象, 减少开销.
3) 还有一些, 但不是很重要的...
3, 例子
- // 创建一个测试数据
- User tester = new User();
- tester.setName("隔壁老张");
- tester.setAge(16);
- tester.setDescription("我住隔壁我姓张!");
- // use tester
- bindUI(tester);
- // 每次创建一个实例, 还要往里面添加数据, 会比较麻烦
- // 下面使用静态工厂方法
- static class User{
- String name ;
- int age ;
- String description;
- public static User newTestInstance() {
- User tester = new User();
- tester.setName("隔壁老张");
- tester.setAge(16);
- tester.setDescription("我住隔壁我姓张!");
- return tester;
- }
- }
- // 创建一个测试数据
- User tester = User.newTestInstance();
- // use tester
- bindUI(tester);
来源: http://www.bubuko.com/infodetail-3402685.html