我遇到了问题,如何将动作放入一个链中,并有可能在处理动作期间传递额外的参数。
让我们考虑一个简单的流程链。输入是表示图像的对象。调整第一个图像的大小,然后部署到 ftp 并保存到 db。使用责任链模式,调用可能如下所示:
ImageProcessor p = new ImageResizer(desiredSize);
p.setNext(new (new ImageDeployer(ftpServer, path)));
p.setNext(new (new ImageDbSaver(dbConnection, table)));
p.process(image);
p.close();
这对于一个图像非常有效。我想循环处理图像并在那里设置desiredSize和路径。我无法每次都创建和关闭连接,因此必须传播代码:
ImageProcessor p = new ImageResizer();
p.setNext(new (new ImageDeployer(ftpServer)));
p.setNext(new (new ImageDbSaver(dbConnection, table)));
for(Image image : images) {
p.process(image, size, path);
}
p.close();
解决方案的一个问题是 ImageProcessor 不应该知道大小和路径。如果只使用 ImageDbSaver 参数,如大小和路径,则没有意义。
有什么更好的方法呢?