@startuml package com.iluwatar.clientsideuicomposition { class ApiGateway { - routes : Map + ApiGateway() + handleRequest(path : String, params : Map) : String + registerRoute(path : String, component : FrontendComponent) } class CartFrontend { + CartFrontend() # getData(params : Map) : String } class ClientSideIntegrator { - LOGGER : Logger {static} - apiGateway : ApiGateway + ClientSideIntegrator(apiGateway : ApiGateway) + composeUi(path : String, params : Map) } abstract class FrontendComponent { + random : Random {static} + FrontendComponent() + fetchData(params : Map) : String # getData(Map) : String {abstract} } class ProductFrontend { + ProductFrontend() # getData(params : Map) : String } } ClientSideIntegrator --> "-apiGateway" ApiGateway CartFrontend --|> FrontendComponent ProductFrontend --|> FrontendComponent @enduml