【LeetCode】【OO Design】Parking

public class Bike implements Vehicle
{

    private String bikeNumber;

    public Bike(String bikeNumber)
    {
        this.bikeNumber = bikeNumber;
    }

    @Override
    public String toString()
    {
        return "bike number=" + bikeNumber;
    }

    @Override
    public VehicleType getType()
    {
        return VehicleType.BIKE;
    }

}
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class FareController
{
    private Map<Vehicle, ParkingDetails> vehicleParkingDetailsMap = new HashMap<>();

    public void onVehicleEntry(Vehicle vehicle, ParkingSlot parkingSlot)
    {
        vehicleParkingDetailsMap.put(vehicle, new ParkingDetails(vehicle, parkingSlot, new Date(), null));
    }

    public void onVehicleExit(Vehicle vehicle)
    {
        ParkingDetails parkingDetails = vehicleParkingDetailsMap.get(vehicle);
        parkingDetails.exitTime = new Date();
    }

    public BigDecimal getFare(Vehicle vehicle)
    {
        ParkingDetails parkingDetails = vehicleParkingDetailsMap.get(vehicle);
        return getFare(parkingDetails, parkingDetails.entryTime, parkingDetails.exitTime);
    }

    private BigDecimal getFare(ParkingDetails parkingDetails, Date entryTime, Date exitTime)
    {
        return null;
    }

}
import java.util.List;

@SuppressWarnings("unused")
public class Floor
{

    private String floorId;
    private int floorNumber;
    private String floorName;
    private List<ParkingSlot> parkingSlots;

    public Floor(String floorId, int floorNumber, String floorName, List<ParkingSlot> parkingSlots)
    {
        this.floorId = floorId;
        this.floorNumber = floorNumber;
        this.floorName = floorName;
        this.parkingSlots = parkingSlots;
    }

    public void emptyFloor()
    {
        for (ParkingSlot slot : parkingSlots)
        {
            slot.emptySlot();
        }
    }
}

 

public class HatchBackCar implements Vehicle
{
    private String carNumber;

    public HatchBackCar(String carNumber)
    {
        this.carNumber = carNumber;
    }

    @Override
    public String toString()
    {
        return "car number=" + carNumber;
    }

    @Override
    public VehicleType getType()
    {
        return VehicleType.COMPACT;
    }

}
import java.util.List;

@SuppressWarnings("unused")
public class Parking
{
    private String parkingId;
    private List<Floor> floors;
    private String parkingName;
    private String address;

    public Parking(String parkingId, List<Floor> floors, String parkingName, String address)
    {
        this.parkingId = parkingId;
        this.floors = floors;
        this.parkingName = parkingName;
        this.address = address;
    }

    public void emptyWholeParkingLot()
    {
        for (Floor floor : floors)
        {
            floor.emptyFloor();
        }
    }

}
import java.util.Date;

public class ParkingDetails
{
    Vehicle vehicle;
    ParkingSlot parkingSlot;
    Date entryTime;
    Date exitTime;

    public ParkingDetails(Vehicle vehicle, ParkingSlot parkingSlot, Date entryTime, Date exitTime)
    {
        this.vehicle = vehicle;
        this.parkingSlot = parkingSlot;
        this.entryTime = entryTime;
        this.exitTime = exitTime;
    }

}
@SuppressWarnings("unused")
public class ParkingSlot
{
    private String slotId;
    private String slotNumber;
    private ParkingStatus status;
    private SlotSize slotSize;

    public ParkingSlot(String slotId, String slotNumber, ParkingStatus status, SlotSize slotSize)
    {
        this.slotId = slotId;
        this.slotNumber = slotNumber;
        this.status = status;
        this.slotSize = slotSize;
    }

    public void parkVehicle(Vehicle vehicle)
    {
        if (this.slotSize.isVehicleParkingPossible(vehicle))
        {
            status = ParkingStatus.OCCUPIED;
        }
        else
        {
            throw new IllegalArgumentException("parking not possible for this vehicle type in this slot");
        }
    }

    public void emptySlot()
    {
        status = ParkingStatus.EMPTY;
    }

}
public enum ParkingStatus
{
    EMPTY, OCCUPIED;
}
public class Sedan implements Vehicle
{

    private String carNumber;

    public Sedan(String carNumber)
    {
        this.carNumber = carNumber;
    }

    @Override
    public String toString()
    {
        return "car number=" + carNumber;
    }

    @Override
    public VehicleType getType()
    {
        return VehicleType.SEDAN;
    }

}
import java.util.Arrays;
import java.util.List;

public enum SlotSize
{
    SMALL(Arrays.asList(VehicleType.BIKE, VehicleType.COMPACT)), MEDIUM(
            Arrays.asList(VehicleType.BIKE, VehicleType.COMPACT, VehicleType.SEDAN)), LARGE(
                    Arrays.asList(VehicleType.BIKE, VehicleType.COMPACT, VehicleType.SEDAN, VehicleType.TRUCK));

    private final List<VehicleType> vehicleTypesAllowed;

    SlotSize(List<VehicleType> vehicleTypes)
    {
        this.vehicleTypesAllowed = vehicleTypes;
    }

    public boolean isVehicleParkingPossible(Vehicle vehicle)
    {
        return vehicleTypesAllowed.contains(vehicle.getType());
    }
}
public interface Vehicle
{
    public VehicleType getType();
}
public enum VehicleType
{
    BIKE, COMPACT, SEDAN, TRUCK
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值