/**
 * El costo de un aviso calculado con una cadena de instanceof. Funciona, pero
 * cada tipo nuevo de aviso obliga a volver aquí (y a cada cadena parecida).
 * Notification.cost(), con un override en cada subclase, hace lo mismo sin cadena.
 */
public class CostByInstanceof {

    public static long cost(Notification n) {
        if (n instanceof EmailNotification) {
            return 0;
        } else if (n instanceof SmsNotification) {
            return 5;
        } else {
            return 1;
        }
    }
}
