El uso adecuado de la interfaz de Java

Jonathan DeLorenzo:

Originalmente creado una interfaz que contiene todos los métodos que serían compartidos entre dos clases, sin embargo, me di cuenta que quería ambas clases para tener los mismos métodos, pero que van a comportarse de manera diferente.

Ellos tendrán el mismo tipo de retorno, pero con diferentes parámetros. No puedo encontrar la manera de poner en práctica esto, o incluso si lo hiciera encontrar la manera de implementar esto, yo no sé si sería la forma correcta de manejar la situación

Básicamente, he llegado aquí buscando el enfoque de la arquitectura correcta a mi lo que estoy tratando de lograr y no sé lo que habría. Creo que tengo 4 preguntas para determinar la arquitectura de código:

  1. Es una interfaz del enfoque aquí, si es así ¿por qué?
  2. Es una clase abstracta del enfoque aquí, si es así ¿por qué?
  3. Esto parece que sería un tema común con programación orientada a objetos, con esto quiero decir que tenga una función que lo que se comporte de manera diferente dado una clase en particular. ¿Cómo debe diseñarse código?
  4. Por último, mi primer pensamiento fue: "Oh, voy a anular el método en una de las clases", pero que me está dando un gran dolor de cabeza y no está funcionando. Siento como si nunca tengo este problema cuando se trata de reemplazar los métodos. Es sustituir un método de una interfaz más compleja?

public interface Character {
    public void setAttack();
}

/*the setAttack method here will be set by the programmer. The 3 values 
 passed by the programmer are then stored into an array*/
public class Player implements Character {
  public void setAttack(int x, int y, int z) {

    attackArray[0] = x;
    attackArray[1] = y;
    attackArray[2] = z;
  }
}

/*the setAttack will still serve the same purpose as the setAttack in the 
 player class, however, the values will be auto generated randomly once the 
 setAttack function is called for the NPC instance.*/

/*Another thought I had is passing the function that auto generates the 3 
integer values (numGen()) as a parameter 3 times, however, I'm not sure if 
this is possible. Just a thought*/


public class NPC implements Character {
  public void setAttack(){

      for(int i = 0; i < attackArray.length; i++)
    {
        attackArray[i] = numGen();
    }
  }
}
GhostCat saludos Monica C.:

Hay una idea errónea conceptual: tener los mismos métodos significa más que la aplicación de métodos que tienen el mismo nombre .

Cuando se utiliza el polimorfismo e interfaces en Java, a continuación, usted está expresando la intención. Como en: clases que implementan algunas interfaces deben proporcionar el correspondiente "funcionalidad". En otras palabras: esto describe un determinado comportamiento.

La cosa es: cuando la interfaz tiene foo(), y diferentes clases podría querer una foo(X), y foo(Y)entonces la verdadera pregunta es: ¿tienen estos métodos más en común que sólo el nombre ?!

Si es así, una posible solución sería otra capa de abstracción. En su caso, como:

public interface AttackParameters {
...


public interface Character {  
  public void setAttack(AttackParameters parms);

o algo igual. La idea es reemplazar de nuevo los detalles "específicas" con una solución genérica.

Alternativamente, se puede utilizar un Map<String, Object>argumento a favor de su setAttack()método. En otras palabras: los parámetros de ataque se identifican mediante cuerdas.

Eso es agradable y dinámico, pero bien, sino que también deja de lado la seguridad en tiempo de compilación. Una versión ligeramente mejorada del método de la hoja no se utilizan cadenas como claves, pero algunos enumeración clase.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=197196&siteId=1
Recomendado
Clasificación