Effective 读书笔记1创建和销毁对象

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> m= new HashMap>();

不过自从 java7 开始,这种方式已经被优化过了,可以在创建实例时省略掉泛型参数。

Map> m= new HashMap<>();

你可能感兴趣的:(Effective 读书笔记1创建和销毁对象)