我正在寻找产品交易者的这个例子:http://www.eli.sdsu.edu/courses/spring98/cs635/notes/builder/builder.html(这是第二个例子。第一个是Builder模式)。我有点困惑。在类图中,它将Specification
显示为不同的类,但在示例中,我没有看到这样的类,看起来像在ClassTrader类中创建了规范类的方法。我错了吗?如果有Product Trader模式的标准示例,那么Specification类看起来如何?
答案 0 :(得分:2)
在您发布的示例中,规范是传递给create方法的String。我之前从未见过这种模式,所以我不知道一个标准的例子。另一个例子是文件到图像交易者,其中规范是文件,结果是从该文件创建的图像(您可以有PNG创建者,JPG创建者等)。
public interface ProductTrader<P, S> {
public P create(S specification);
}
public interface ImageCreator {
public boolean canProcess(File file);
public Image createImage(File file);
}
public class PNGImageCreator implements ImageCreator {
public boolean canProcess(File file) {
return (file.isFile() && file.canRead() && file.getName().endsWith(".png"));
}
public Image createImag(File file) {
//Image I/O code goes here
}
}
public class FileToImageProductTrader implements ProductTrader<Image, File> {
private List<ImageCreator> imageCreators = new ArrayList<ImageCreator>();
public void registerCreator(ImageCreator creator) {
imageCreators.add(creator);
}
public Image create(File specification) {
for(ImageCreator creator : imageCreators) {
if(creator.canProcess(specification)) {
return creator.createImage(specification);
}
}
//No creator for given file
return null;
}
}
public class Main {
public static void main(String [] args) {
FileToImageProductTrader trader = new FileToImageProductTrader();
PNGCreator pngCreator = new PNGCreator();
trader.registerCreator(pngCreator);
File imageFile = new File("/tmp/foo.png");
Image image = trader.create(imageFile);
}
}