O que devo usar: functores, interfaces ou métodos abstratos ao escrever uma camada (compatibilidade) abstração? (Linguagem D)

StackOverflow https://stackoverflow.com/questions/790041

  •  16-09-2019
  •  | 
  •  

Pergunta

. Por exemplo: uma camada de compatibilidade entre objectos de script (como cadeias de caracteres, matrizes) ou scripts motores (. Eval (), readFile () etc)

Foi útil?

Solução

Sem mais contexto, eu teria que dizer que as interfaces também. Considere que você pode representar uma função ou delegar como uma interface com um único método e que classes abstratas são interfaces apenas com alguns métodos potencialmente já implementadas.

Dito isso, ele realmente depende do que você está tentando realizar. Interfaces prestam-se aos casos em que você tem um monte de objetos com uma interface comum, mas implementações potencialmente diferentes. Se você está, por exemplo, a concepção de um sistema de chamada de retorno muito simples para plugins (ou seja .: deixar os plug-in gancho certos eventos no aplicativo host), em seguida, os delegados são provavelmente mais simples e suficiente para suas necessidades.

Também tenha em mente que se você ir com interfaces, você provavelmente precisa de alguma maneira para o acolhimento de casos instanciar. A maneira mais fácil de fazer isso é por registrar um delegado com o anfitrião sob algum nome único.

As classes abstratas só são úteis se você quiser usar interfaces e fornecer uma implementação padrão de algumas coisas. A melhor solução neste caso é ter uma interface real em vez, e fornecer a implementação padrão como um mixin.

Outras dicas

Interfaces tem o meu voto. Dessa forma, contanto que você definir a interface qualquer desenvolvedor será capaz de escrever algo compatível com bastante facilidade, sem você ter que distribuir muito código para eles.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top