package com.insightfullogic.java8.examples.chapter8.strategy; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.util.zip.GZIPOutputStream; import java.util.zip.ZipOutputStream; // BEGIN Compressor 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 outStream = new FileOutputStream(outFile)) { Files.copy(inFile, strategy.compress(outStream)); } } // END Compressor public static void classBasedExample(Path inFile, File outFile) throws IOException { // BEGIN classBasedExample Compressor gzipCompressor = new Compressor(new GzipCompressionStrategy()); gzipCompressor.compress(inFile, outFile); Compressor zipCompressor = new Compressor(new ZipCompressionStrategy()); zipCompressor.compress(inFile, outFile); // END classBasedExample } public static void lambdaBasedExample(Path inFile, File outFile) throws IOException { // BEGIN lambdaBasedExample Compressor gzipCompressor = new Compressor(GZIPOutputStream::new); gzipCompressor.compress(inFile, outFile); Compressor zipCompressor = new Compressor(ZipOutputStream::new); zipCompressor.compress(inFile, outFile); // END lambdaBasedExample } }