第6篇:文件排序策略与 JDK Comparator 对比
第6篇文件排序策略与 JDK Comparator 对比摘要文件管理器按名称、大小、日期排序天然适合策略模式。而 JDK 的Comparator本身就是策略模式的经典实现。本文通过对比加深理解。 系列导航上一篇第5篇实战案例电子面单多平台架构中的三层策略下一篇第7篇策略模式 vs 状态模式——别再傻傻分不清原系列总目录 订阅本专栏不错过每一篇本文是《Java 23 种设计模式从踩坑到精通》策略模式长文的扩充短文第6篇帮助你碎片化掌握核心知识点。文件管理器中用户可以按名称、大小、修改日期排序文件。这天然适合策略模式而且 JDK 的Comparator本身就是策略模式的经典实现。1. 抽象策略publicinterfaceSortStrategy{voidsort(ListFileInfofiles);}2. 具体策略publicclassSortByNameimplementsSortStrategy{Overridepublicvoidsort(ListFileInfofiles){files.sort(Comparator.comparing(FileInfo::getName));System.out.println(按名称排序完成);}}publicclassSortBySizeimplementsSortStrategy{Overridepublicvoidsort(ListFileInfofiles){files.sort(Comparator.comparingLong(FileInfo::getSize));System.out.println(按大小排序完成);}}publicclassSortByDateimplementsSortStrategy{Overridepublicvoidsort(ListFileInfofiles){files.sort(Comparator.comparing(FileInfo::getModifiedDate));System.out.println(按修改日期排序完成);}}Comparator本身就是策略接口comparing()方法返回的就是具体策略。3. 上下文文件管理器publicclassFileManager{privateSortStrategysortStrategy;publicvoidsetSortStrategy(SortStrategysortStrategy){this.sortStrategysortStrategy;}publicvoidsortFiles(ListFileInfofiles){if(sortStrategy!null){sortStrategy.sort(files);}}}与 JDK Comparator 的关系实际上SortStrategy完全可以由ComparatorFileInfo替代因为Comparator本身就是策略接口。我们自定义SortStrategy是为了更清晰地展示模式结构实际开发中可以直接使用Comparator。你的场景该不该用 Comparator 替代自定义策略判断标准是 → 直接用 Comparator否 → 自定义策略接口策略本质是比较/排序✅❌策略有额外的业务语义如发送通知❌✅需要与现有 Comparator API 无缝集成✅❌一句话总结JDK 的 Comparator 是策略模式的活教材理解它就能理解策略模式的核心思想。完整长文入口本文是策略模式扩充系列的第6篇。如果你想一次性阅读完整内容含UML、完整代码、框架应用、面试追问等请查看原长文 《Java 23 种设计模式从踩坑到精通 | 策略模式》 系列导航上一篇第5篇实战案例电子面单多平台架构中的三层策略下一篇第7篇策略模式 vs 状态模式——别再傻傻分不清返回扩充系列目录 订阅本专栏不错过每一篇原系列总目录 订阅本专栏不错过每一篇
