Untitled

 avatar
unknown
plain_text
2 years ago
3.9 kB
7
Indexable
import java.util.HashMap;
import java.util.Map;

// Abstract class representing an airline
abstract class Airline {
    protected double operatingCost;

    public Airline(double operatingCost) {
        this.operatingCost = operatingCost;
    }

    public abstract double calculateTicketCost(double distance, String seatingClass);
}

// Concrete airline class - Delta
class Delta extends Airline {
    private static final double PER_MILE_COST = 0.50;

    public Delta(double operatingCost) {
        super(operatingCost);
    }

    @Override
    public double calculateTicketCost(double distance, String seatingClass) {
        return distance * (PER_MILE_COST + operatingCost);
    }
}

// Concrete airline class - United
class United extends Airline {
    private static final double PER_MILE_COST = 0.75;
    private static final double PREMIUM_PER_MILE_COST = 0.10;

    public United(double operatingCost) {
        super(operatingCost);
    }

    @Override
    public double calculateTicketCost(double distance, String seatingClass) {
        double cost = distance * (PER_MILE_COST + operatingCost);
        if (seatingClass.equals("Premium")) {
            cost += PREMIUM_PER_MILE_COST * distance;
        }
        return cost;
    }
}

// Concrete airline class - Southwest
class Southwest extends Airline {
    private static final double PER_MILE_COST = 1.00;

    public Southwest(double operatingCost) {
        super(operatingCost);
    }

    @Override
    public double calculateTicketCost(double distance, String seatingClass) {
        return distance * PER_MILE_COST;
    }
}

// Concrete airline class - LuigiAir
class LuigiAir extends Airline {
    private static final double FIXED_COST = 100.0;
    private static final double OPERATING_COST_MULTIPLIER = 2.0;

    public LuigiAir(double operatingCost) {
        super(operatingCost);
    }

    @Override
    public double calculateTicketCost(double distance, String seatingClass) {
        double luigiAirOperatingCost = OPERATING_COST_MULTIPLIER * operatingCost;
        double luigiAirCost = Math.max(FIXED_COST, luigiAirOperatingCost);
        return luigiAirCost;
    }
}

// Singleton class to manage airlines and ticket calculation
class AirlineTicketManager {
    private static AirlineTicketManager instance;
    private Map<String, Airline> airlines;

    private AirlineTicketManager() {
        airlines = new HashMap<>();
        airlines.put("Delta", new Delta(0.0));
        airlines.put("United", new United(0.0));
        airlines.put("Southwest", new Southwest(0.0));
        airlines.put("LuigiAir", new LuigiAir(0.0));
    }

    public static AirlineTicketManager getInstance() {
        if (instance == null) {
            instance = new AirlineTicketManager();
        }
        return instance;
    }

    public double calculateTicketCost(String airlineName, double distance, String seatingClass) {
        Airline airline = airlines.get(airlineName);
        if (airline != null) {
            return airline.calculateTicketCost(distance, seatingClass);
        }
        throw new IllegalArgumentException("Invalid airline: " + airlineName);
    }
}

// Example usage
public class Main {
    public static void main(String[] args) {
        AirlineTicketManager manager = AirlineTicketManager.getInstance();

        double cost1 = manager.calculateTicketCost("United", 150.0, "Premium");
        double cost2 = manager.calculateTicketCost("Delta", 60.0, "Business");
        double cost3 = manager.calculateTicketCost("Southwest", 1000.0, "Economy");
        double cost4 = manager.calculateTicketCost("LuigiAir", 50.0, "Business");

        System.out.println(cost1); // Output: 152.50
        System.out.println(cost2); // Output: 95.00
        System.out.println(cost3); // Output: 1000.00
        System.out.println(cost4); // Output: 125.00
    }
}
Editor is loading...