用静态工厂方法代替构造器

我们平时想获取类的一个实例,都是通过调用它的构造方法,也就是通过构造器实现。

但是还有一种方法。就是,类可以提供一个公有的静态工厂方法

静态工厂方法,是类中的一个公有静态方法,用来返回类的实例

比如:

class People{
  public static People newPeople(){
    return new People();
  }
}

或者

public class Person {
    private final SEX sex;
    private final String name;
    private final int age;

    private Person(String name, int age, SEX sex){
        this.sex = sex;
        this.name = name;
        this.age = age;
    }

    public static Person getManInstance(String name, int age){ // 返回男性
        return new Person(name, age, SEX.man);
    }
    
    public static Person getWomanInstance(String name, int age){ // 返回女性
        return new Person(name, age, SEX.woman);
    }
}

enum SEX{
    man,
    woman;
}

静态工厂方法的好处:

1.它们有名称

因为构造器的名字只能是类名。所以不能很确切的描述返回的对象。特别是当参数列表本身没有确切描述对象的时候。

但是静态工厂方法却可以通过提供不同的方法名,来做到确切的描述返回的对象。

而且,虽然一个类的构造器的方法签名不能重复,但是可以通过调换参数列表的顺序,来绕开这个限制。

但是这种方式很不好,很容易让人记不清到底该调用哪个。

2.不必在每次调用时都创建新的对象

调用构造器方法的话,每次调用都会创建一个新对象。

而静态工厂方法的话就不用每次调用都创建一个新对象。

public class Position{
    private final int x;
    private final int y;
    private static Position ORIGIN = new Position(0,0);
    private Position(int x, int y){
        this.x = x;
        this.y = y;
    }

    public static Position getORIGIN(){
        return ORIGIN;
    }
    
    public int getX(){
        return x;
    }
    
    public int getY(){
        return y;
    }
}
3. 他们可以返回原返回类型的任何子类型的对象

怎么样才算静态工厂方法:
Java 静态工厂方法详解_TWW-CSDN博客_静态工厂方法
还在new对象吗?试试静态工厂方法--Effective Java第二章 - 颜小四的文章 - 知乎

posted @ 2021-03-08 00:36  张三丰学Java  阅读(73)  评论(0编辑  收藏  举报