模板方法

定义

定义一个操作中的算法的框架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

结构和说明

AbstractClass:抽象类。用来定义算法骨架和原语操作。还提供算法中的通用的实现。
ConcreteClass : 具体实现类。用来实现算法骨架中的某些步骤,完成和特定子类相关的功能。
例子:
笔者在实现爬虫抓去的代码中,获取初始url,下载页面,解析页面内容,获取url流程是固定的,至于是用什么存储url以及用什么存储页面文章和图片,则交由具体的子类去负责。粗略代码如下 :

public  abstract class AbsCrawler{
    private final static Logger logger =  LoggerFactory.getLogger(AbsCrawler.class);
    /*
    *获取初始的url,一般是通用的,从固定的文件中获取
    */
    public void Initializer(){
        File inputfile = new File(file_Addr);
        try {
            FileReader fr = new FileReader(inputfile);
            BufferedReader br = new BufferedReader(fr);
            String s;
            while ((s = br.readLine()) != null) {
                putUrl(s);
            }
        }catch(FileNotFoundException|IOException e){
            logger.error(".....");
            具体的一些处理
            return或者抛出异常退出
        }
    }
    /*
    *下载页面
    *param url 下载的地址
    */
    public void getPage(String url);
    /*
    *
    * 解析文件的内容
    */
    public void getContent();
    /*
    *获取url 
    */
    public String getUrl();
    /*
    *param url 入库的url
    */
    public void putUrl(String url);

}

public  class  DBCrawler extends AbsCrawler{

    ....使用redis存储urlmongodb存储无规则的页面内容
}

public  class  FileCrawler extends AbsCrawler{

    ....使用File存储urlmysql存储无规则的页面内容
}
>>当然,根据SRP设计原则,url存储和页面存储应当作为接口通过扩展和两者组合实现。可以搭配策略模式使用啦
No Final is final
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值