清淨
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • 设计模式

    • 简介
    • 软件设计原则
    • 创建型模式

      • 概述
      • 单例模式
      • 工厂模式
      • 原型模式
      • 建造者模式
    • 结构型模式

      • 概述
      • 代理模式
      • 适配器模式
      • 装饰器模式
    • 行为模式

      • 概述
      • 责任链模式
      • 观察者模式
      • 策略模式
      • 模板方法模式

策略模式

策略模式能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。策略模式中的所有策略都要继承同样的父类或者实现同样的接口。

interface FileParserStrategy {
    boolean support(String fileName);

    void parse(String fileName);
}
@Component
public class TextFileParser implements FileParserStrategy { 

    @Override
    public boolean support(String fileName) { 
        return fileName.endsWith(".txt");
    }

    @Override
    public void parse(String fileName) { 
        System.out.println("解析文本文件:" + fileName);
    }
}
@Component
public class WordFileParser implements FileParserStrategy { 

    @Override
    public boolean support(String fileName) { 
        return fileName.endsWith(".doc") || fileName.endsWith(".docx");
    }

    @Override
    public void parse(String fileName) { 
        System.out.println("解析Word文件:" + fileName);
    }
}
@Service
public class FileParserService { 

    @Autowired
    private List<FileParserStrategy> fileParserStrategies;

    public void parse(String fileName) { 
        for (FileParserStrategy fileParserStrategy : fileParserStrategies) { 
            if (fileParserStrategy.support(fileName)) { 
                fileParserStrategy.parse(fileName);
                break;
            }
        }
    }
}
想要编辑此页?
上次更新: 2025/10/18 20:33
贡献者: Junfeng Dai
←观察者模式模板方法模式→
[ 纸上得来终觉浅绝知此事要躬行 ]
Copyright © 2021-present Junfeng Dai
蜀ICP备2021009537号