策略模式

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

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;
            }
        }
    }
}