Java - 产品交易者规范类?

时间:2013-11-03 09:03:15

标签: java design-patterns

我正在寻找产品交易者的这个例子:http://www.eli.sdsu.edu/courses/spring98/cs635/notes/builder/builder.html(这是第二个例子。第一个是Builder模式)。我有点困惑。在类图中,它将Specification显示为不同的类,但在示例中,我没有看到这样的类,看起来像在ClassTrader类中创建了规范类的方法。我错了吗?如果有Product Trader模式的标准示例,那么Specification类看起来如何?

1 个答案:

答案 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);
  }

}