@startuml

abstract class PF9AbstractClient
note "Defines standard interface supported for consumer" as N1
PF9AbstractClient .. N1

class PF9v1Client
class PF9v2Client
class PF9v3Client

PF9v1Client <|-- PF9AbstractClient
PF9v2Client <|-- PF9AbstractClient
PF9v3Client <|-- PF9AbstractClient

class ClientFactory
Client --> ClientFactory : asks
ClientFactory --> PF9v1Client : creates
ClientFactory --> PF9v2Client : creates
ClientFactory --> PF9v3Client : creates

class PF9Error
note "Object of PF9Error is used \nif client fails because of some reason." as N2
PF9Error .. N2
class PF9ClientFactoryError
note "Object of PF9ClientFactoryError is used \nif client creation fails." as N3
PF9ClientFactoryError .. N3

@enduml