Hallo,
ich habe eine frage zur vorgehensweise um Objekte einer Runtime als ein Service zu registrieren. Ich habe ein Objekt welches über Service Methoden verfügt. Diese Service Methoden sollenvon anderen Objekten verwendet werden die keine Referenz auf das Service Objekt besitzen. Ich würde einen Service Mediator dazwischen setzen, bei dem sich Service Objekte registrieren können. Die ServiceMethoden benötigen Parameter die ich typensicher definieren möchte.
Serivce Klasse:
ServiceMediator:
ServiceMediatorListener:
ServiceParameter
Consumer Klasse
Das Problem ist, das das ServiceParameter Objekt so nicht typensicher gefüllt werden kann. Gibt es hier einen besseren Ansatz?
Gruß
dbausnnd
ich habe eine frage zur vorgehensweise um Objekte einer Runtime als ein Service zu registrieren. Ich habe ein Objekt welches über Service Methoden verfügt. Diese Service Methoden sollenvon anderen Objekten verwendet werden die keine Referenz auf das Service Objekt besitzen. Ich würde einen Service Mediator dazwischen setzen, bei dem sich Service Objekte registrieren können. Die ServiceMethoden benötigen Parameter die ich typensicher definieren möchte.
Serivce Klasse:
Java:
public class ServiceClass implements ServiceMediatorListener{
ServiceMediator mediator;
String name = "ServiceName";
public ServiceClass(ServiceMediator mediator) {
this.mediator = mediator;
ServiceParameter<Date> parm = new ServiceParameter<Date>("Datum", new Date());
mediator.registerService(this, name, parm);
}
@Override
public void callService(ServiceParameter... parm) {
System.out.println(String.format("Service '%s' wurde gestartet mit %s Parametern.", name, parm.length));
System.out.println();
for(int i = 0; i < parm.length; i++){
System.out.println(String.format("%s. Parameter = %s", i, parm[i]));
}
}
}
ServiceMediator:
Java:
public class ServiceMediator {
Map<String, ServiceMediatorListener> mapListener = new Hashtable<String, ServiceMediatorListener>();
Map<String, ServiceParameter> mapParameter = new Hashtable<String, ServiceParameter>();
public void registerService(ServiceMediatorListener listener, String serviceName, ServiceParameter<?> parameter){
this.mapListener.put(serviceName, listener);
this.mapParameter.put(serviceName, parameter);
}
public ServiceParameter<?> getServiceparameter(String servicName){
return mapParameter.get(servicName);
}
public void callService(String serviceName, ServiceParameter<?>... parm){
if(mapListener.containsKey(serviceName)){
mapListener.get(serviceName).callService(parm);
}
}
}
ServiceMediatorListener:
Java:
public interface ServiceMediatorListener<T> {
public void callService(ServiceParameter<?>... parm);
}
ServiceParameter
Java:
public class ServiceParameter<T> {
String name;
T value;
public ServiceParameter(String name, T value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
Consumer Klasse
Java:
public class ConsumerClass {
ServiceMediator mediator;
public ConsumerClass(ServiceMediator mediator) {
this.mediator = mediator;
}
public void start(){
ServiceParameter<?> parm = mediator.getServiceparameter("ServiceName");
parm.setValue(new Date());
mediator.callService("ServiceName", parm);
}
}
Das Problem ist, das das ServiceParameter Objekt so nicht typensicher gefüllt werden kann. Gibt es hier einen besseren Ansatz?
Gruß
dbausnnd
Zuletzt bearbeitet von einem Moderator: