2

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

4

1 回答 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 回答