public interface ICompressor
void Compress(string fileName);
public class JpgCompressor: ICompressor
public void Compress(string fileName)
Console.WriteLine("Compressing using JPG");
public class PngCompressor: ICompressor
public void Compress(string fileName)
Console.WriteLine("Compressing using JPG");
void Apply(string fileName);
public class BlackAndWhiteFilter: IFilter
public void Apply(string fileName)
Console.WriteLine("Applying Black and White filter");
public class HighContrastFilter: IFilter
public void Apply(string fileName)
Console.WriteLine("Applying High Contrast filter");
public class ImageStorage
public void Store(string fileName, ICompressor compressor, IFilter filter)
compressor.Compress(fileName);
public static void Main()
var imageStorage = new ImageStorage();
imageStorage.Store("banner.jpg", new JpgCompressor(), new BlackAndWhiteFilter());
imageStorage.Store("banner.jpg", new PngCompressor(), new HighContrastFilter());