package mxdx1; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; //服务注册中心(单例模式) public class ServiceRegistry { // 单例实例 private static ServiceRegistry instance; // 服务存储:服务名 -> 服务列表 private Map> serviceMap; // 观察者列表:服务名 -> 观察者列表 private Map> observers; // 私有构造函数 private ServiceRegistry() { serviceMap = new ConcurrentHashMap<>(); observers = new ConcurrentHashMap<>(); } // 获取单例实例 public static synchronized ServiceRegistry getInstance() { if (instance == null) { instance = new ServiceRegistry(); } return instance; } // 注册服务 public void register(ServiceInfo serviceInfo) { String serviceName = serviceInfo.getServiceName(); serviceMap.computeIfAbsent(serviceName, k -> new CopyOnWriteArrayList<>()) .add(serviceInfo); // 通知观察者 notifyObservers(serviceName); } // 注销服务 public void unregister(ServiceInfo serviceInfo) { String serviceName = serviceInfo.getServiceName(); List services = serviceMap.get(serviceName); if (services != null) { services.remove(serviceInfo); // 通知观察者 notifyObservers(serviceName); } } // 发现服务 public List discover(String serviceName) { return serviceMap.getOrDefault(serviceName, new ArrayList<>()); } // 注册观察者 public void addObserver(String serviceName, ServiceObserver observer) { observers.computeIfAbsent(serviceName, k -> new CopyOnWriteArrayList<>()) .add(observer); } // 通知观察者 private void notifyObservers(String serviceName) { List obs = observers.get(serviceName); if (obs != null) { List services = discover(serviceName); for (ServiceObserver observer : obs) { observer.onServiceChanged(serviceName, services); } } } }