我正在寻找产品交易者的这个例子:http ://www.eli.sdsu.edu/courses/spring98/cs635/notes/builder/builder.html (这是第二个例子。第一个是Builder模式)。我有点困惑。在类图中,它显示Specification
为不同的类,但在示例中我没有看到这样的类,并且看起来规范类的方法是在 ProductTrader 类中创建的。我弄错了吗?如果有产品交易者模式的标准示例,规范类会是什么样子?
问问题
497 次
1 回答
2
在您发布的示例中,规范是传递给 create 方法的字符串。我以前从未见过这种模式,所以我不知道一个标准的例子。另一个例子是文件到图像交易者,其中规范是一个文件,结果是从该文件创建的图像(您可以有一个 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);
}
}
于 2013-11-03T12:58:49.767 回答