@startuml
!include style.puml
skinparam arrowThickness 1.1
skinparam arrowColor STORAGE_COLOR
skinparam classBackgroundColor STORAGE_COLOR

Interface Storage <<Interface>>
Interface UserPrefsStorage <<Interface>>
Interface HeliBookStorage <<Interface>>

note "Interface with generic methods,\npreviously named AddressBookStorage" as N1
N1 .up. HeliBookStorage

Class StorageManager
Class JsonUserPrefsStorage
Class JsonAddressBookStorage
Class JsonAppointmentBookStorage

StorageManager .left.|> Storage
StorageManager o-right-> UserPrefsStorage
StorageManager o--> HeliBookStorage

JsonUserPrefsStorage .left.|> UserPrefsStorage
JsonAppointmentBookStorage .left.|> HeliBookStorage
JsonAddressBookStorage .right.|> HeliBookStorage
JsonAppointmentBookStorage .down.> JsonSerializableAppointmentBookStorage
JsonAddressBookStorage .down.> JsonSerializableAddressBookStorage
JsonSerializableAppointmentBookStorage .down.> JsonSerializableAppointment
JsonSerializableAddressBookStorage .down.> JsonSerializableContact
JsonSerializableAppointment .down.> JsonAdaptedTag
note on link
    "(Extra) For tag command"
end note
JsonSerializableContact .down.> JsonAdaptedTag

@enduml
