Desea utilizar una refactorización que reemplaza un condicional utilizando una clase polimórfica. Para example.
O aquí es otra example
En esencia, el ideal es muy simple de crear una jerarquía de objetos, y se mueven los distintos comportamientos en un método sobreescrito. Todavía necesitará un método para crear la clase correcta, pero esto se puede hacer usando un patrón de fábrica.
Editar
quiero añadir que esto no es una solución perfecta en todos los casos. Como (olvidé su nombre, lo siento) señaló en mis comentarios, algunas veces esto puede ser un dolor especialmente si tiene que crear un modelo de objeto solo para hacer esto. Este refactorización excells si tienen esta:
function doWork(object x)
{
if (x is a type of Apple)
{
x.Eat();
} else if (x is a type of Orange)
{
x.Peel();
x.Eat();
}
}
Aquí puede refactorizar el interruptor en algún nuevo método que cada fruta manejará.
Editar
Como alguien ha señalado, ¿cómo crear el tipo correcto para entrar en DoWork, hay más formas de resolver este problema, entonces yo podría enumerar PROBally por lo que algunas formas básicas. El primero y más sencillo (y sí va en contra de esta pregunta) es un interruptor:
class FruitFactory
{
Fruit GetMeMoreFruit(typeOfFruit)
{
switch (typeOfFruit)
...
...
}
}
Lo bueno de este enfoque es que es fácil de escribir, y es generalmente el primer método que utilizo. Si bien todavía tiene una instrucción switch está aislada de un área de código y es muy básica, todo lo que devuelve es un n objeto. Si solo tiene un par de objetos y no están cambiando, esto funciona muy bien.
Otros patrones más compelx que puedes mirar es un Abstract Factory. También podría crear dinámicamente Fruit si su plataforma lo admite. También podría usar algo como el Provider Pattern. Lo que esencialmente para mí significa que configuras tu objeto y luego tienes una fábrica que, según la configuración y una clave que le das a la fábrica, crea dinámicamente la clase correcta.
¿Puedes dar un ejemplo? – Apocalisp