功能介绍
Java的提供给我们异常捕捉机制, 是为了让我们对可能出现异常的代码设置策略. 当其出现异常时执行我们布置的策略.
对于不同的异常指定不同的策略更加利于程序的执行. 而且可供使用的策略可以归结为以下几种:
- 停止程序运行, 输出错误日志.
- 对异常进行处理, 执行其他代码.
- 更换发生异常位置处的输入值, 重新执行直到成功执行为止.
中秋节时期在家看书, 突然对第三种处理方法有很多感触. 在策略模式中, 使用第三种异常处理方式可能具有很好地效果. 例如前段时间做的网络爬虫在爬取页面时, 需要根据页面的情况制定不同的爬取策略. 这个情景就非常符合策略模式当时是使用策略模式创建的这一模块. 将不同的爬取策略视为完成一件事可采用的不同算法.
爬取的过程中因为不同策略里包含有不同的正则表达式, 所以如果使用不恰当的策略可能导致出现正则匹配时的异常. 在这种情况下可以使用第三种异常处理方式: 如果出现正则匹配异常, 我们替换爬取策略然后再次重复匹配直到正确匹配到或者爬取策略用光为止.
实现方式
第三种处理方式
boolean notFound = true;
currentStrategy = strategiesItem;
do
{
try
{
String content_i_need = getContent(); //当没有匹配到时抛出异常.
notFount = false; //标识已找到
}
catch(someException ex)
{
if(hasMoreStrategies)
{
currentStrategy = nextStrategy; //如果具有其他的策略,替换当前爬取策略
}
else
{
notFound = false; //如果没有其他策略, 则停止循环
}
}
}while(notFound); //没找到或没有可替换策略时循环
关于策略的替换, 我们首先得知道一共有多少种策略然后才能在每次替换时使用. 所以我们需要一个策略注册机制, 对已有的策略进行注册让程序知道目前可用的策略有多少个.
或者我们可以使用监听者模式来完成这一需求.
参考文献
- 数据结构 –Java版 [D.S.Malik]