Една набираща популярност услуга е наемът на колела и автомобили за кратко - било то за няколко минути, часа, или пък за цял ден. Естествено, все още съществува възможността и за по-дългосрочен наем на превозно средство за няколко дни или седмици.
Задачата ни този път е да комбинираме двете, упражнявайки знанията си за Records, Sealed Classes и Exceptions. Не всяка от тези концепции е зададена явно, така че мислете внимателно къде какво бихте могли да приложите. Платформата за наем на превозни средства, която ще разработим е простичък клас със следната основна структура, която вие трябва да надградите с имплементация и всичко друго, което сметнете за необходимо. Шофьорите са репрезентирани от проста структура със следния конструктор. Такса "млад шофьор" Както забелязвате, returnVehicle методът връща цена за наем, която включва и такса, свързана с възрастта на шофьора. Това е честа практика при компаниите, отдаващи автомобили под наем - смята се, че по-младите и по-възрастните водачи са по-склонни към произшествия и затова те дължат по-голям депозит. В нашия случай, за простота, добавяме еднократна такса, която се начислява към крайната сума за наем вместо депозит.
Таксите са както следва:
JUNIOR: 10 EXPERIENCED: 0 SENIOR: 15
Дадена е йерархия от класове, моделираща поддържаните превозни средства: като основен клас имаме Vehicle, който има три наследника - Bicycle, Car и Caravan. Част от класа Vehicle изглежда по следния начин, като трябва да допълните липсващата функционалност. Видове превозни средства и цена за наем Услугата ни предоставя възможност за наемане на три вида превозни средства - колела, коли и каравани. Наемът и цената на всеки един от тези типове зависят от няколко условия.
Колела Колела могат да бъдат наемани за няколко часа или няколко дни, но не повече от седмица (6 дни, 23 часа, 59мин и 59сек; винамавайте да не паднете в overengineering pitfall, проверката е извикване на един метод). Колелата имат зададени цени за наем за час и за ден. Липсва наем за седмица, т.к. не могат да бъдат наемани за такъв период. Автомобили Автомобилите имат двигатели (представени чрез изброения тип по-долу), които имат различна такса на ден, която се прибавя към финалната цена за наем. Автомобилите имат зададени цени за наем за час, ден и седмица. Автомобилите имат вместимост - брой седалки и стандартна цена за една седалка - 5
Каравани Караваните имат двигатели (представени чрез изброения тип по-долу), които имат различна такса на ден, която се прибавя към финалната цена за наем. Караваните имат вместимост - брой седалки и стандартна цена за една седалка - 5. Караваните имат допълнителна вместимост - брой легла и стандартна цена за едно легло - 10. Караваните могат да бъдат наети за минимум един ден (24ч).
enum FuelType Стойностите на типа FuelType и техните дневни такси:
DIESEL: 3 PETROL: 3 HYBRID: 1 ELECTRICITY: 0 HYDROGEN: 0
Primer :
public static void main(String[] args) { RentalService rentalService = new RentalService(); LocalDateTime rentStart = LocalDateTime.of(2024, 10, 10, 0, 0, 0); Driver experiencedDriver = new Driver(AgeGroup.EXPERIENCED);
Vehicle electricCar = new Car("1", "Tesla Model 3", FuelType.ELECTRICITY, 4, 1000, 150, 10);
rentalService.rentVehicle(experiencedDriver, electricCar, rentStart);
double priceToPay = rentalService.returnVehicle(electricCar, rentStart.plusDays(5)); // 770.0
Vehicle dieselCar = new Car("2", "Toyota Auris", FuelType.DIESEL, 4, 500, 80, 5);
rentalService.rentVehicle(experiencedDriver, dieselCar, rentStart);
priceToPay = rentalService.returnVehicle(dieselCar, rentStart.plusDays(5)); // 80*5 + 3*5 + 4*5 = 435.0
}