Effective 读书笔记1创建和销毁对象
2018-11-25 本文已影响0人
打死也不加班
1静态工厂方法
创建对象最常见的方法就是通过构造器 出来
Date date = new Date();
SimpleDateFormat aDate=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
还有一种方法-------静态工厂方法
Fragment fragment = MyFragment.newIntance();
Calendar calendar = Calendar.getInstance();
Integer number = Integer.valueOf("1");
我们要创建一个Animal类:
public class Animal {
private String name;//名字
private int age;//年龄
private double weight;//体重
private int height;//高度
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public Animal(int age, int height) {
this.age = age;
this.height = height;
}
}
静态工厂方法
public class Animal {
public static Animal getInstance() {
return new Animal();
}
}
优点:
1.有名称:
构造器 只能通过不同参数来创建不同对象,当每次都只能通过构造器参数来描述创建的对象,
静态工厂方法 直接通过方法名来表示更为清晰。
例:
Date类就有很多重载函数,使用不熟悉的话还要查看api才能明白每个参数的含义了
而使用静态工厂方法,可以自己修改方法名,让代码的编写和阅读都更加清晰。
还有一个优点:可以有多个参数相同但名称不同的工厂方法
如果需要通过相同的参数类型来创建不同的对象时
比如:
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public Animal(String name, int height) {
this.name = name;
this.height= height;
}
因为构造器只能通过参数类型来判断 通常会采用
public Animal(String name, int age,int height) {
this.name = name;
this.height= height;
}
使用静态工厂方法 就不需要为这种事担忧,使代码更加简化
public static Animal newAnimalWithAge(int age) {
Animal animal = new Animal();
animal.age=age;
return animal;
}
public static Animal newAnimalWithheight(int height) {
Animal animal = new Animal();
animal.height=height;
return animal;
}
2.不用每次被调用时都创建新对象------单例模式
private Animal(){
}
private static Animal cat = new Animal();
public static Animal Cat() {
return cat;
}
3.可以返回原返回类型的子类
public class Animal {
public static Animal getInstanceCat() {
return new Cat();
}
}
class Cat extends Animal{
}
4.在创建带泛型的实例时,能使代码变得简洁
这条主要是针对带泛型类的繁琐声明而说的,需要重复书写两次泛型参数:
Map<String,List<String>> m= new HashMap<String,List<String>>();
不过自从 java7 开始,这种方式已经被优化过了,可以在创建实例时省略掉泛型参数。
Map<String,List<String>> m= new HashMap<>();