(3)更复杂的工厂模式
在Tuscany SCA软件中有Artifact Professor的创建是更为复杂的工厂模式,Artifact Professor是描述如何处理Artifact的接口(在SCA中,最基本的部件是Artifact,即包含外部的artifact,也包括内部的artifact,Artifact是Contribute的原子,我们部署我们的应用到SCA上,那么每个应用就叫一个Contribute)。下面是类图:
这儿你可以看到美学在软件架构设计中的应用,呵呵!

代理模式的使用
如图所示,ExtensibleURLArtifactProcessor 和 ExtensibleStAXArtifactProcessor分别是接口URLArtifactProcessor和 StAXArtifactProcessor的实现类,它们都包含相应的ArtifactProcessorExtensionProcessor接口,即包含相应的工厂,外部的调用是首先调用这个代理类,从而获取这个工厂并创建出相应的ArtifactProcessor。从而实现了代理模式。
public Object read(XMLStreamReader source) throws ContributionReadException {
// Delegate to the processor associated with the element qname
QName name = source.getName();
StAXArtifactProcessor<?> processor =
(StAXArtifactProcessor<?>)processors.getProcessor(name);
if (processor == null) {
return null;
}
try {
return processor.read(source);
} catch (XMLStreamException e) {
throw new ContributionReadException(e);
}
}
// Delegate to the processor associated with the element qname
QName name = source.getName();
StAXArtifactProcessor<?> processor =
(StAXArtifactProcessor<?>)processors.getProcessor(name);
if (processor == null) {
return null;
}
try {
return processor.read(source);
} catch (XMLStreamException e) {
throw new ContributionReadException(e);
}
}