2

プロダクト トレーダー向けの例を探しています: http://www.eli.sdsu.edu/courses/spring98/cs635/notes/builder/builder.html (2 番目の例です。1 番目は Builder パターンです)。そして、私は少し混乱しました。クラス図ではSpecification別のクラスとして表示されていますが、例ではそのようなクラスは表示されず、ProductTrader クラスで Specification クラスのメソッドが作成されたように見えます。私は間違っていますか?Product Trader パターンの標準的な例があれば、Specification クラスはどのようになりますか?

4

1 に答える 1

2

投稿した例では、仕様は作成メソッドに渡される文字列です。私はこれまでにこのパターンを見たことがないので、標準的な例を知りません。もう 1 つの例は、仕様がファイルであり、結果がそのファイルから作成された画像であるファイルから画像へのトレーダーです (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 に答える