Estoy tratando de implementar un patrón de Fábrica en Java.
Tengo una clase llamada Forma que el Círculo y el Triángulo se extiende.
El problema es que la Forma constructor sólo recibe 2 parámetros, mientras que el Círculo recibe 3 parámetros y así es Triángulo (que yo no se mostrará en la sección de código porque es idéntica a la del Círculo).
Para demostrar que es mejor:

    private interface ShapeFactory{
        public Shape create(int x, int y);
    }

    private class CircleFactory implements ShapeFactory{
        public Shape create(float radius, int x, int y){ //error
            return new Circle(radius, x,y);
        }
    }

Alguna idea de cómo solucionar este problema? No debo recibir una entrada del usuario en el interior de la fábrica (tiene que ser recibidas desde el exterior).

Gracias!

  • ¿Por qué quieres usar una fábrica? ¿Qué estás tratando de lograr?
  • El pensamiento no es una solución dulce, puede pasar, además del mapa de Forma concreta los parámetros específicos. Por otra parte: es necesario proporcionar la radio en la creación? Se puede establecer alguna radio por defecto en la creación y, a continuación, ajustar el radio después de la creación de la forma.
  • Bien, pensé acerca de esta opción, pero esto contradice la idea de constructor…
  • El error no puede ser donde usted está mostrando. Lo que probablemente es un error, ya que su círculo de fábrica no es abstracto, sin embargo, no aplicar cualquiera de los métodos de su ShapeFactory de la interfaz. ¿Por qué crees que necesita fábricas para este caso de uso?
  • De acuerdo. Para hacerlo aquí probablemente sería un caso donde todo es un contenedor de carga, hechos de la misma uñas con el mismo martillo.
InformationsquelleAutor Jjang | 2012-12-14

3 Comentarios

  1. 33

    Usted tiene dos opciones:

    1) Resumen De La Fábrica:

    RectangularShape extends Shape

    RoundShape extends Shape

    y RectangularShapeFactory y RoundShapeFactory

    2) El generador de (véase también el Punto 2 en Efectivo Java)

    public Shape {
        private final int x;
        private final int y;
        private final double radius;
    
        private Shape(Builder builder) {
            x = builder.x;
            y = builder.y;
            radius = builder.radius;
        }
    
        public static class Builder {
            private final int x;
            private final int y;
            private double radius;
    
            public Builder(int x, int y) {
                this.x = x;
                this.y = y;
            }
    
            public Builder radius(double radius) {
                this.radius = radius;
                return this;
            }
    
            public Shape build() {
                return new Shape(this);
            }    
        }
    }
    
    //in client code 
    
        Shape rectangle = new Shape.Builder(x,y).build();
        Shape circle = new Shape.Builder(x,y).radius(radiusValue).build();
    • Resumen de la Fábrica no resolver este problema. Todos ShapeFactory implementaciones todavía necesita una interfaz común.
    • (2) El generador de aquí parece que sólo implícita Servicio de localizador de anti-patrón.
  2. 8

    Lo que usted está tratando de hacer es simplemente imposible. Si el constructor argumentos son diferentes, entonces el código de cliente se tiene que hacer un trabajo diferente para un Circle como para un Square y usted no puede resolver esto con el código uniforme. Si hay otro trabajo de la fábrica está haciendo además de manejar el constructor de los argumentos que usted cree que debería ocurrir en una fábrica, entonces usted necesita para enviar esto a su pregunta y el estado de la dificultad que están teniendo en el factoring este código común de trabajo.

  3. 7

    Todas las implementaciones deben tener el mismo número de argumentos, usted tiene tres opciones:

    • tener el almacén de la fábrica de la adición de los argumentos por lo que sólo tendrá que proporcionar el centro por ejemplo.
    • tiene la fábrica de tomar todos los argumentos, aunque algunas fábricas podrían pasar por alto algunos de ellos.
    • tiene un argumento ser de longitud variable. por ejemplo, ‘doble…» el problema con esto es que la persona necesita para saber lo que la fábrica necesita que derrota el propósito de una fábrica. En mi humilde opinión.
    • Le sugerimos que vaya con la opción 2, el día de hoy?
    • Sólo la primera opción está disponible en la adecuada Abstracto patrón de Fábrica. Otra manera de hacer una Fábrica de tener ambos métodos CreateTriangle y CreateCircule pero parece ser ortogonal a la OP objetivo.

Dejar respuesta

Please enter your comment!
Please enter your name here