Una manera elegante de hacer esto, si además del coste cambiará por ejemplo el método de tarificación sería montar un patrón estrategia.
http://es.wikipedia.org/wiki/Strategy_(patr%C3%B3n_de_dise%C3%B1o)
El polimorfismo es lo que usa ese patrón, tu tienes varios algoritmos implementados de diferente manera en cada clase que hereda de la abstracta por poner un ejemplo, o de la interfaz, y así no tienes que estar mirando el tipo.
Lo de los ifs efectivamente es cargarse el polimorfismo.
Saludos