1700484770
public Checker(IXmlValidate_validate){
1700484771
1700484772
this.validate=_validate;
1700484773
1700484774
}
1700484775
1700484776
public void setXmlPath(String_xmlPath){
1700484777
1700484778
this.xmlPath=_xmlPath;
1700484779
1700484780
}
1700484781
1700484782
//检查
1700484783
1700484784
public boolean check(){
1700484785
1700484786
return validate.validate(xmlPath);
1700484787
1700484788
}
1700484789
1700484790
}
1700484791
1700484792
与通用策略模式稍有不同,每个模式在实际应用环境中都有其个性,很少出现完全照搬一个模式的情况,灵活应用设计模式才是关键。
1700484793
1700484794
在FilterDispatcher的init方法中,我们刚刚说它有两个职责:第一个职责是XML文件校验,这个我们完成了;第二个职责是启动监控程序。问题是要监控什么呢?监控XML有没有被修改,如果修改了就立刻通知校验程序对它进行校验。这就又用到了观察者模式:发现文件被修改,它立刻通知检查者处理,该片段的类图如图38-5所示。
1700484795
1700484796
1700484797
1700484798
1700484799
图38-5 XML文件监控类图
1700484800
1700484801
为什么要在这里定义一个Watchable接口呢?它表示所有可以监视的资源,比如数据库、日志文件、磁盘空间等。我们来看代码,监听接口如代码清单38-8所示。
1700484802
1700484803
代码清单38-8 监听接口
1700484804
1700484805
public interface Watchable{
1700484806
1700484807
//监听
1700484808
1700484809
public void watch();
1700484810
1700484811
}
1700484812
1700484813
文件监听者是观察者模式的被观察者,它一旦发现文件发生变化立刻通知观察者,如代码清单38-9所示。
1700484814
1700484815
代码清单38-9 文件监听者
1700484816
1700484817
public class FileWatcher extends Observable implements Watchable{
1700484818
1700484819
//是否要重新加载XML文件
[
上一页 ]
[ :1.70048477e+09 ]
[
下一页 ]