Interface com assinatura de métodos diferentes...[Resolvido]

Pessoal, estou reescrevendo algumas classes para usarem o padrão strategy…

Por ex: Tenho uma classe Plataforma, que irá implementar uma interface registrarOcorrencia()

Porém, esse metódo registrar ocorrência, para cada plataforma, eu posso ter parametros diferentes…

class Plataforma1 implements registrarOcorrencia(){

void registraOcorrencia(Documento doc 1){

}


class Plataforma2 implements registrarOcorrencia(){

void registraOcorrencia(Documento doc 1,String path){

}

class Plataforma3 implements registrarOcorrencia(){

void registraOcorrencia(Documento doc 1,String path,File arquivo){

}


}

No caso, eu teria que ter 3 métodos diferentes na interface, pois cada um recebe parâmetros distintos…

Existe alguma forma de evitar essa repetição?? (Creio que não…) Existe alguma abordagem elegante para tratar esse comportamento??

Obrigado !!

Eu diria que o ideal é teres um BusinessObject com toda a informação que poderá ser necessário e depois cabe a cada implementação da interface utilizar toda ou apenas parte da informação.

class MyObject{
    Document doc;
    String path;
    File arquivo;
}



interface MyInterface{

    void registaOcorrencia(MyObject obj);
  
}



class Plataforma1 implements MyInterface{
    
    void registaOcorrencia(MyObject obj){

              ....
    } 
}

Olá, obrigado pela resposta… Mas acho que com o passar do tempo, esses parametros aumentariam e causariam um pouco de confusão para quem fosse usar a classe, pois não ficaria claro oque deveria ser preenchido.

Será que realmente não tenho muita opção, perante isso??

obrigado !

[quote=phlopes]Pessoal, estou reescrevendo algumas classes para usarem o padrão strategy…

Por ex: Tenho uma classe Plataforma, que irá implementar uma interface registrarOcorrencia()

Porém, esse metódo registrar ocorrência, para cada plataforma, eu posso ter parametros diferentes…

class Plataforma1 implements registrarOcorrencia(){

void registraOcorrencia(Documento doc 1){

}

class Plataforma2 implements registrarOcorrencia(){

void registraOcorrencia(Documento doc 1,String path){

}

class Plataforma3 implements registrarOcorrencia(){

void registraOcorrencia(Documento doc 1,String path,File arquivo){

}


}

No caso, eu teria que ter 3 métodos diferentes na interface, pois cada um recebe parâmetros distintos…

Existe alguma forma de evitar essa repetição?? (Creio que não…) Existe alguma abordagem elegante para tratar esse comportamento??

Obrigado !![/quote]

Minha dica caso você queira parametros indeterminados:

void registraOcorrencia(Object... doc)

neste caso, vc faria um foreach nos objetos de entrada e trataria com instanceof

quando vc invokar esse método, vc consegue mandar quantidade indeterminada de parametros:

ocorrencia.registraOcorrencia(obj1, obj2, obj3 ...)

Nesse caso, algo está mal nesse modelo de negócio e essa interface não tem razão para existir.

Na prática seria como a minha solução mas muito mais confusa…

Acredito que esteja usando interfaces de maneira incorreta.

Na interface você chamaria o método da mesma forma, sem se preocupar com a implementação.

Se cada classe que chamar o método precisa saber da implementação (para saber o que ele recebe), não faz sentido ter interface.

Uma sugestão no seu caso seria deixar o método registraOcorrencia sem parametros e transformar os argumentos em atributos da classe.

    public static void main(String[] args) {
        
        //na hora de criar os objetos, passo os valores específicos
        RegistradorOcorrencia[] registradores = { 
            new Plataforma1(documento),
            new Plataforma2(documento, path ),
            new Plataforma3(documento, path, arquivo)
        };
        
        
        //na hora de chamar não importa a implementação
        for (RegistradorOcorrencia registrador : registradores) {
            registrador.registraDocumento();            
        }
        
        
    }

Obrigado à todos… Realmente , concordo com você Abel, no caso terei que usar o construtor para trabalhar com os parâmetros !!

valeu ! abraço