classDiagram
class Configuration {
<<interface>>
+String getValue(String key)
+void setValue(String key, String value)
+void refresh()
}
class LocalConfiguration {
-Properties properties
+getValue(String key) String
+setValue(String key, String value)
+loadFromFile(String filePath)
}
class RemoteConfiguration {
-ConfigClient client
-Map~String, String~ cache
+getValue(String key) String
+setValue(String key, String value)
+refresh()
+pullFromServer()
}
class ConfigClient {
<<interface>>
+String fetchConfig(String key)
+void updateConfig(String key, String value)
+Map~String, String~ fetchAll()
}
class ConsulConfigClient {
-ConsulClient consulClient
+fetchConfig(String key) String
+updateConfig(String key, String value)
+fetchAll() Map~String, String~
+watchChanges(ConfigChangeListener listener)
}
class NacosConfigClient {
-NacosConfigService configService
+fetchConfig(String key) String
+updateConfig(String key, String value)
+fetchAll() Map~String, String~
}
class ConfigurationManager {
-Configuration configuration
-List~ConfigChangeListener~ listeners
+getInstance() ConfigurationManager
+getConfig() Configuration
+setConfig(Configuration config)
+notifyListeners(ConfigChangeEvent event)
}
class ConfigChangeListener {
<<interface>>
+onChange(ConfigChangeEvent event)
}
Configuration <|.. LocalConfiguration
Configuration <|.. RemoteConfiguration
RemoteConfiguration --> ConfigClient
ConfigClient <|.. ConsulConfigClient
ConfigClient <|.. NacosConfigClient
ConfigurationManager --> Configuration
ConfigurationManager o-- ConfigChangeListener
ConsulConfigClient --> ConfigChangeListener : notifies