@startuml !include theme.ipuml skinparam Linetype ortho skinparam Nodesep 75 skinparam Ranksep 30 class ComponentManager <<irrelevant>> package api { class Component <<irrelevant>> class Script { - Script() -- # init() <<virtual>> # update() <<virtual>> -- - parent : BehaviorScript * } class BehaviorScript { # BehaviorScript() + ~BehaviorScript() -- + set_script<T>() : this & -- # script : Script * } BehaviorScript -u-|> Component Script <.u. BehaviorScript : > friend Script ..u> BehaviorScript } class System <<irrelevant>> class ScriptSystem <<Singleton>> { + get_instance() : ScriptSystem & <<static>> + update() -- - ScriptSystem() - ~ScriptSystem() } System <|-- ScriptSystem ScriptSystem .[norank]> ComponentManager ScriptSystem .[norank]> api.Script : < friend ScriptSystem .[norank]> api.BehaviorScript : < friend ComponentManager .[norank]> api.BehaviorScript : < friend @enduml