策略模式

147 阅读1分钟
封装具体的算法。
//算法接口
   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);