Pergunta

Eu estou muito familiarizado com o padrão de comando, mas eu ainda não entendo a diferença na teoria entre uma Functor e um comando. Em particular, eu estou pensando em implementações de Java. Ambos são, basicamente, a programação "verbos" representados como objetos. No entanto, no caso de functors, como já visto alguns exemplos anônimos implementações de classe internas parecem comum. Pode alguém lá fora, esclarecer isso para me bem?

Foi útil?

Solução

Um functor é um conceito 'nível sintaxe' - que empacota código em um objeto que pode ser tratada sintaticamente como um ponteiro de função - ou seja, ele pode ser 'chamado', colocando lista de parâmetros entre parênteses após ele. Em C ++ você poderia fazer uma classe um functor, substituindo operador ().

Um comando no padrão de comando é um objeto que pacotes-se algumas funcionalidades executável, mas não há nenhuma exigência para que ele seja um functor. Por exemplo, poderia ser uma classe que implementa um ICommand interface, permitindo a sua comando a ser executado chamando Do ().

Outras dicas

Um functor é uma implementação, uma maneira de fazer um comportam objeto como uma função.

O 'padrão de comando' é um padrão de design.
O functor é uma maneira de implementar o 'Padrão Command'.

Aqui vem a resposta do GOF :

Coplien descreve como implementar functors, objetos que são funções, em C ++ [Cop92]. Ele alcança um grau da transparência do seu uso por sobrecarregar o operador de chamada de função (operador()). O padrão Command é diferente; seu foco está em manter uma ligação entre um receptor e um função (isto é, acção), não apenas manter uma função .

A partir da descrição da página do Apache Commons Functor :


Um functor é uma função que pode ser manipulado como um objecto, ou de um objecto que representa uma única função, genérico.

Suporte Functores e incentivar uma série de técnicas de programação poderosos, incluindo:

  • programação em um estilo funcional
  • funções de ordem superior
  • iteradores internos
  • reutilização e especialização através da composição em vez de herança e sobrecarga
  • genérico "retorno" ou "ponto de extensão" APIs
  • genéricos "filtros" ou APIs predicado
  • muitos "comportamentais" padrões de design, como visitante, Estratégia, Chain of Responsibility, etc.

De acordo com GOF (Gang of Four) citou definição (por Comptrol), Functor e comando são dois padrões diferentes.

Como já foi dito, Functor representa uma classe que contém um método de serviço, em outros termos: a principal responsabilidade para a classe functor é armazenar a lógica específica implementada em seu próprio método. Assim, podemos pensar no functor como um recipiente para seu próprio método é lógica interna. Historicamente, Functor nasce porque na especificação Java não está presente a implementação e / ou conceito de 'ponteiro de função', que é muito útil no contexto de retornos de chamada registrados (implementação específica para o observador padrão).

O padrão de comando representa um padrão de design que visa dissociar uma entidade Invoker de um receptor. É usado principalmente quando ela é necessária para decuple as ações (gerando os eventos) dos ouvintes de ação (acho que para GUIs). Tem um método responsável pela excecution de uma operação específica (dependendo da implementação determinado comando de sua própria superclasse) referindo-se a um receptor específico de objeto; na definição declarado, o método de execução pode ser definida como "não inteligente", na verdade, com uma implementação inteligente poderia ser em si para implementar a lógica operativa em vez de delegá-lo a um terceiro objeto. Quando temos um método de execução inteligente, estamos implementando um functor, e estamos colocando o functor (implementação específica comando sub) no contexto do padrão de comando.

Espero que isso será útil para você.

Eu acho que de um functor como sendo um componente do padrão de comando, que também envolve outras infra-estruturas, tais como o invocador e comando destinatários.

padrão

O comando é usado em Java porque não têm tampas em Java. Functors é uma tentativa de implementar encerramentos.

Uma linguagem com fechos não precisa do padrão de comando.

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