我有接口Service
public interface Service{}
以及多种实现public class ServiceA implements Service{}
public class ServiceB implements Service{}
现在,每个服务都有某种配置,例如
public interface Service{
ServiceConfiguration getConfig()
}
但是,这些实现中的每一个都需要不同的配置,例如ServiceA
需要port
、version
、url
,serviceB需要port
、socket
、file
等等。
有什么优雅的好的实践方法可以实现这一点?我唯一想到的是为每个服务创建ServiceConfiguration
的实现(并将其用作Marker接口),然后将其强制转换,例如public interface ServiceConfiguration {}
public class ServiceAConfiguration implements ServiceConfiguration {
int port;
int version;
String url;
}
public class ServiceBConfiguration implements ServiceConfiguration {
int port;
Socket socket;
File file;
}
然后将其转换为如下代码:
Service s = new ServiceA(...);
ServiceAConfiguration config = (ServiceAConfiguration)s.getConfig();
有没有更好的方法,某种最佳实践或某种设计模式?到目前为止,我只找到了AbstractDocument
设计模式来处理属性,但我认为这在这里不适用。
谢谢你帮忙!
2条答案
按热度按时间34gzjxbg1#
可以在
Service
定义中使用泛型:public class ServiceA implements Service<ServiceAConfiguration>{}
public class ServiceB implements Service<ServiceBConfiguration>{}
x一个一个一个一个x一个一个二个x
您不再需要强制转换配置:
bcs8qyzn2#
在我看来,您使用
Configuration
作为数据载体,因此需要公开实际状态(端口、url等),我建议您改变方法,提供任何必须配置的内容,或者创建新的配置对象(任何更适合您的用例的内容)。属性使它看起来像连接的配置,所以我将它用作占位符。
这样,您就不需要向外界公开实际的配置细节,因此也不需要将
ServiceConfiguration
强制转换为实际的类。