AbsChain类
对于AbsChain采用的是职责链设计模式,目的是抽象出网络爬虫处理html的过程,因为在spider程序集中并不真正处理如何解析html,用户只需重载AbsChain类中的process方法,完成自定义的处理过程
程序源码如下:
namespace WebSpider
{
/// <summary>
/// 职责链抽象类
/// </summary>
public abstract class AbsChain
{
private AbsChain _handler=null;
private string _url = string.Empty;
public string Url { get { return _url; } set { _url = value; } }
internal AbsChain Handler
{
get
{
return _handler;
}
}
/// <summary>
/// 文本处理过程
/// </summary>
/// <param name="htmlStream">html文本</param>
protected abstract void Process(string html);
/// <summary>
/// 设置下一个处理节点
/// </summary>
/// <param name="handler">下一个处理节点</param>
public void SetProcessHandler(AbsChain handler)
{
_handler = handler;
}
/// <summary>
/// 开始处理
/// </summary>
/// <param name="htmlStream">html文本流</param>
public void Start(string html)
{
Process(html); //处理用户重载方法
if (Handler != null)
{
Handler.Url = Url;
Handler.Start(html);
}
}
}
}
ChainMain类:
ChainMain类是对AbsChain类的具体实现,但是它的Process方法是个空方法,所以你可以把它理解成它就是具体处理职责链上的头节点,通过ChainMain类的_handler将处理任务往下传递,用户通过调用ChainMain的SetProcessHandler方法设置下一个处理节点,这个节点必须由用户继承AbsChain并实现抽象方法Process。ChainMain类的源代码如下:
namespace WebSpider
{
internal class ChainMain : AbsChain
{
protected override void Process(string html)
{
}
}
}
未完,待续……