org.eclipse.core.runtime.adapters
该扩展点,可以通过IAdapterFactory 把 类型转换这块代码 抽取出来,从而达到解除耦合。
原始做法:
public class Model implements IAdaptable{
。。。。。
@Override
public Object getAdapter(Class adapter) {
if。。return
if。。。return
在这里if else
}
}
这样做扩展性不太好。
使用扩展点的方式:
public class Model extends PlatformObject {。。。。}
这样就可以了。不用再if else
PlatformObject会从AdapterManager.getDefault().getAdapter(this, adapter);得到需要的类型。
在使用之前 需把IAdapterFactory注册到AdapterManager里。
可以通过代码的形式,也可以通过扩展点点形式。
代码注册:
Platform.getAdapterManager().registerAdapters(new AdapterFactory(), User.class);
扩展点注册:
<extension
point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="model.User"
class="adapter.AdapterFactory">
<adapter
type="adapter.IAddress">
</adapter>
</factory>
</extension>
扩展点是使用AdapterFactoryProxy 对IAdapterFactory进行了代理/包装。
总结
1:model 实现 PlatformObject
2:向AdapterManager中注册IAdapterFactory
从而实现动态的类型转换(适配)