En lugar de considerar un método constructor estático fábrica

En lugar de considerar un método constructor estático fábrica

Lo que es un método de fábrica estática

En Java, una instancia de clase conseguir la forma más sencilla es utilizar la nueva palabra clave, para lograr la creación de un objeto por el constructor.
De esta manera:

    Fragment fragment = new MyFragment();
    // or
    Date date = new Date();

Sin embargo, en el desarrollo real, a menudo también vemos otra manera de conseguir instancia de clase:

	Fragment fragment = MyFragment.newIntance();
    // or 
    Calendar calendar = Calendar.getInstance();
    // or 
    Integer number = Integer.valueOf("3");

↑ así: Por no es nuevo, sino más bien una forma de proporcionar método estático externa propia instancia, esto es lo que llamamos un método de fábrica estática (método de fábrica estática).

Effective Java fábrica estática resumir las ventajas

1. constructores diferentes con método de fábrica estática primera ventaja es que tienen un nombre
2. Diferentes métodos de fábrica estática y constructores segunda ventaja, no siempre es crear un nuevo objeto se llama
3. método de fábrica estática y la estructura una tercera ventaja es diferente, puede volver a la tipo de retorno original de la subclase
4. cuarta ventaja, al crear instancias de una cinta genérica, el código puede ser sencillo

método de fábrica estática puede tener el mismo nombre pero con diferentes parámetros del método (que es diferente de la constitución puede ser unificado nombre)

class Child{
    int age = 10;
    int weight = 30;
    public static Child newChild(int age, int weight) {
        Child child = new Child();
        child.weight = weight;
        child.age = age;
        return child;
    }
    public static Child newChildWithWeight(int weight) {
        Child child = new Child();
        child.weight = weight;
        return child;
    }
    public static Child newChildWithAge(int age) {
        Child child = new Child();
        child.age = age;
        return child;
    }
}

↑ como esto: la diferencia entre un constructor sólo puede ser una cuestión del mismo nombre, newChild (), newChildWithWeight () , newChildWithAge (), se muestra ver más claramente el nombre EENOW
( Nota: con el fin de resaltar el nombre de una elección cuidadosa entre ellas la diferencia) .

Reducir la exposición externa de la propiedad a través del método de fábrica estática

El desarrollo de software tiene una lección muy importante: cuanto más expuesto a los atributos externos, más fácil es el error de la persona que llama. Así que para las clases del proveedor, en general, se deben hacer esfuerzos para reducir la exposición externa de propiedades, lo que reduce la posibilidad de que la persona que llama error.

Considere lo siguiente una clase de jugador:

// Player : Version 1
class Player {
    public static final int TYPE_RUNNER = 1;
    public static final int TYPE_SWIMMER = 2;
    public static final int TYPE_RACER = 3;
    protected int type;
    public Player(int type) {
        this.type = type;
    }
}

Jugador extranjero proporciona un constructor, lo que permite a los usuarios pasar de un tipo para indicar el tipo. A continuación, se espera que esta clase para llamar de esta manera:

    Player player1 = new Player(Player.TYPE_RUNNER);
    Player player2 = new Player(Player.TYPE_SWEIMMER);

Sin embargo, sabemos que el proveedor no es capaz de controlar el comportamiento de la persona que llama, la invocación real podría tener este aspecto:

    Player player3 = new Player(0);
    Player player4 = new Player(-1);
    Player player5 = new Player(10086);

Proveedor valor deseado pasado en el constructor es una de varias constantes predefinidas, pero si no, puede conducir fácilmente a errores de programa.
- Para evitar este error, utilice una enumeración en lugar de los valores constantes es un método común, por supuesto, si usted no utiliza la enumeración, el uso de lo que hoy llamamos el protagonista de método de fábrica estática es una muy buena manera.

Si los requisitos anteriores se consigue mediante un método de fábrica estática, por lo que el código es más o menos:

// Player : Version 2
class Player {
    public static final int TYPE_RUNNER = 1;
    public static final int TYPE_SWIMMER = 2;
    public static final int TYPE_RACER = 3;
    int type;

    private Player(int type) {
        this.type = type;
    }

    public static Player newRunner() {
        return new Player(TYPE_RUNNER);
    }
    public static Player newSwimmer() {
        return new Player(TYPE_SWIMMER);
    }
    public static Player newRacer() {
        return new Player(TYPE_RACER);
    }
}

Nota donde el constructor se declara privada, por lo que puede evitar que sea llamado fuera, por lo que la persona que llama cuando se usa el ejemplo del jugador, probablemente debería ser creado por newRunner, newSwimmer, newRacer éstos método de fábrica estática, la persona que llama sin no es necesario conocer el valor de un tipo especificado - para que pueda escribir en el ámbito de la asignación bajo el control, la prevención de los casos antes mencionados valor atípico

Fuente: https://www.jianshu.com/p/ceb5ec8f1174

Publicado 30 artículos originales · ganado elogios 8 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/wg22222222/article/details/84104731
Recomendado
Clasificación