封装具体的算法。复制代码
//算法接口 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)); } } }复制代码
//使用 // old way Compressor gzip=new Compressor(new GzipCompressionStrategy()); gzip.compress(infile,outfile); //lambda way Compressor zip=new Compressor(ZipOutputStream::new); zip.compress(infile,outfile);复制代码