我正在使用适配器隐藏外部API:
DocumentTreeNodeAdapter DocumentTreeNode
| |
| |
CommonTreeAdapter ----> CommonTreeNode ----> CommonTree (foreign)
CommonTreeAdapter有一个apply()方法,它返回一个CommonTreeNode。 我只想分发接口。客户端代码将在DocumentTreeNode和 DocumentTreeNodeAdapter接口。
因为我想进一步简化适配器创建,所以应该有一个Factory:
DocumentTreeNodeAdapterFactoryImpl
我的问题是关于那家工厂:
我倾向于使它成为通用的,它会提供方法:
register(Class<? extends DocumentTreeNodeAdapter, Class<?> target);
检索某个适配器:
getAdapterFrom(Class<?> target);
e.g。
getAdapterFrom(CommonTree.class);
但是我应该在哪里注册适配器?实际上目前只有一个适配器可以在工厂中进行硬编码,但为了可扩展性,我真的很喜欢这种寄存器(...)方法。
我稍后会用Guice把东西连在一起。我应该初始化模块中的工厂还是Guice提供了一种简单的方法来执行此操作?我还没有见过Guice。
在此先感谢,我确信有人知道这是如何做的,因为它是广泛使用的东西,但我找不到一些样品。
亲切的问候
答案 0 :(得分:0)
DocumentTreeNodeAdapter
是一个界面
SimpleDocumentTreeNodeAdapter
扩展DocumentTreeNodeAdapter
并包含CommonTreeAdapter
(适配器)
public void register(DocumentTreeNodeAdapter documentTreeNodeAdapter , Class targetClass);
public DocumentTreeNodeAdapter getAdapterFrom(Class aClass);
例如:
DocumentTreeNodeAdapter adapter = new SimpleDocumentTreeNodeAdapter(commonTreeAdapter);
documentTreeNodeAdapterFactoryImpl.register(adapter , CommonTree.class);
documentTreeNodeAdapterFactoryImpl.getAdapterFrom(CommonTree.class);
第一反应:
只是一个消化
register(Class<? extends DocumentTreeNodeAdapter, Class<?> target);
会变成
public void register(DocumentTreeNodeAdapter documentTreeNodeAdapter);
或者目标不是您要注册的适配器的类
public void register(DocumentTreeNodeAdapter documentTreeNodeAdapter , Class targetClass);
DocumentTreeNodeAdapter将是一个接口和
getAdapterFrom(Class<?> target)
会变成
public DocumentTreeNodeAdapter getAdapterFrom(Class aClass);
如果CommonTree实现了DocumentTreeNodeAdapter,则下一行仍可正常工作
getAdapterFrom(CommonTree.class);
但对于Guice部分,我无法帮助你