Não sei se existe algum
design pattern que descreva esta técnica, mas eu defendo que o importante é saber utilizar as técnicas adequadas para cada problema, invés de saber os nomes dos padrões.
O problema é o seguinte:
- tenho uma função que me retorna um valor;
- condicionado a esse valor quero chamar funções diferentes;
A primeira abordagem que nos pode vir a cabeça é: "então vamos lá por uns if's que testam o valor do retorno da primeira função". Apesar de no exemplo seguinte a primeira função (
FuncaoComplexa() ) só retornar 2 valores diferentes, e isto seria simplesmente resolvido com um if, imagine-se que a função podia retornar 100 números diferentes.
private Dictionary connectorMapper; private delegate string DelegateFunction();
public Ctor() { connectorMapper = new Dictionary(); connectorMapper.Add(-1, new DelegateFunction(NegativeValue)); connectorMapper.Add(1, new DelegateFunction(PositiveValue)); }
private string NegativeValue() { return "Valor negativo"; }
private string PositiveValue() { return "Valor positivo"; }
private void CalcFunction() { //uma função qualquer que retorne 1 ou -1 int indexer = FuncaoComplexa()
DelegateFunction func = connectorMapper[indexer]; Console.WriteLine( "Entrou na função com: " + func() ); } |
|
Com esta técnica é criado um dicionário que como chave tem os possíveis valores retornados pela primeira função, e como valor tem as funções que se querem chamar consoante o valor retornado pela primeira função. Depois indexa-se ao dicionário com o retorno da primeira função e chama-se a função que o dicionário retorna.
Sem comentários:
Enviar um comentário