封装具体的算法。
public interface CompressionStrategy {
public OutputStream compress(OutputStream data) throws IOException;
}
public class GzipCompressionStrategy implements CompressionStrategy {
@Override
public OutputStream compress(OutputStream data) throws IOException{
return new GZIPOutputStream(data);
}
}
public class Compressor {
private final CompressionStrategy strategy;
public Compressor(CompressionStrategy strategy){
this.strategy=strategy;
}
public void compress(Path infile,File outfile) throws IOException {
try (OutputStream out = new FileOutputStream(outfile)) {
Files.copy(infile,strategy.compress(out));
}
}
}
Compressor gzip=new Compressor(new GzipCompressionStrategy());
gzip.compress(infile,outfile);
Compressor zip=new Compressor(ZipOutputStream::new);
zip.compress(infile,outfile);