【死磕Java并发】-----深入分析syn
590 2023-04-03 03:06:37
类别:行为型设计模式
目的:把同类的代码进行单独封装、使得需要使用这部分代码的用户可以按需使用
压缩算法:
滤镜:
public class HardCode { public static void main(String[] args) { var fileName = "test.webp"; var compressor = "jpeg"; var filter = "blackAndWhite"; handleUpload(fileName, compressor, filter); } public static void handleUpload(String fileName, String compressor, String filter) { if (compressor.equals("jpeg")) { System.out.println("应用jpeg压缩算法..."); } else if (compressor.equals("png")) { System.out.println("应用png压缩算法..."); } if (filter.equals("blackAndWhite")) { System.out.println("应用blackAndWhite滤镜"); } else if (filter.equals("backgroundBlur")) { System.out.println("应用blackAndBlur滤镜"); } }}
上面的代码分成两类,一类是压缩算法,另一类是滤镜算法
压缩算法接口
public interface Compressor { void apply(String fileName);}
2个压缩算法的具体实现
public class JpegCompressor implements Compressor { @Override public void apply(String fileName) { System.out.println("应用jpeg压缩算法..."); }}public class PngCompressor implements Compressor { @Override public void apply(String fileName) { System.out.println("应用png压缩算法..."); }}
滤镜算法
public interface Filter { void apply(String fileName);}
2个滤镜算法的具体实现
public class BlackAndWhiteFilter implements Filter { @Override public void apply(String fileName) { System.out.println("应用blackAndWhite滤镜"); }}public class BackgroundBlurFilter implements Filter { @Override public void apply(String fileName) { System.out.println("应用backgroundBur滤镜"); }}
使用策略
public static void main(String[] args) { var fileName = "test.webp"; var compressor = new JpegCompressor(); var filter = new BlackAndWhiteFilter(); handleUpload(fileName, compressor, filter); } public static void handleUpload(String fileName, Compressor compressor, Filter filter) { compressor.apply(fileName); filter.apply(fileName); }
可以看到这里个策略模式把具体的算法实现单独抽离到独立的类中了,调用方流程更加清晰,同时,单独的具体算法实现类也更容易被复用了
每个策略的具体实现可以很复杂,通过封装,使得这部分复杂的代码保持了独立
策略对象由用户进行创建并传递到处理方法中: handleUpload(String fileName, Compressor compressor, Filter filter)