==============================================================================
在读取xml时候用了单利模式,里面有一个构造方法的 变量赋值问题,如果不加this,是无法进行赋值的
==============================================================================
package com.nusof.xml.tools;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* <p>
* 类说明:
* </p>
*
* @version 1.0
* <p>
* 文件名: XmlConfigReader.java
* </p>
* <p>
* 创建人及时间: zcw 2011-5-4
* </p>
* <p>
* 修改人:
* </p>
* <p>
* 修改时间:
* </p>
* <p>
* 修改描述:
* </p>
*/
public class XmlConfigReader {
// (延迟加载 懒汉式)
private static XmlConfigReader instance = null;
public static synchronized XmlConfigReader getInstance() {
if (instance == null) {
instance = new XmlConfigReader();
}
return instance;
}
// 保存regex配置
private List<RegexPatternConfig> regexPatternConfigs = new ArrayList<RegexPatternConfig>();
public List<RegexPatternConfig> getRegexPatternConfigs() {
return regexPatternConfigs;
}
@SuppressWarnings("unchecked")
public XmlConfigReader() {
SAXReader reader = new SAXReader();
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("ajax-config.xml");
try {
Document doc = reader.read(in);
// 取得regex的配置
List<RegexPatternConfig> regexPatternConfigs = new ArrayList<RegexPatternConfig>();
Element websites = doc.getRootElement();
for (Iterator<Element> it = websites.elementIterator(); it
.hasNext();) {
/**
* id + RegexPatternConfigChild
*/
RegexPatternConfig regexPatternConfig = new RegexPatternConfig();
/**
* 两个正则表达式
*/
RegexPatternConfigChild regexPatternConfigChild = new RegexPatternConfigChild();
/**
* 每个网站
*/
Element website = it.next();
/**
* 网站id
*/
String websiteId = website.attributeValue("website-id");
// System.out.println("取得网站id" + websiteId);
regexPatternConfig.setWebsiteId(Integer.valueOf(websiteId));
/**
* 临时变量保存正则表达式
*/
Regex scriptRegex = new Regex();
/**
* ===============================================* script-regex
* begin ===============================================*
*/
Element scriptRegexElt = (Element) website
.selectObject("./script-regex/regex");
/**
* script-regex 网页url正则
*/
String scriptRegexStr = scriptRegexElt.getStringValue();
/**
* 组号
*/
int scriptGroupNo = Integer.valueOf(scriptRegexElt
.attributeValue("group"));
/**
* 匹配模式
*/
String scriptRunType = scriptRegexElt.attributeValue("run");
scriptRegex.setRegexStr(scriptRegexStr);
scriptRegex.setGroup(scriptGroupNo);
scriptRegex.setType(scriptRunType);
regexPatternConfigChild.setScriptRegex(scriptRegex);
// System.out.println(scriptGroupNo);
// System.out.println(scriptRunType);
// System.out.println(scriptRegexStr);
regexPatternConfigChild.setScriptRegex(scriptRegex);
// ========script-regex end===============
/**
* 临时变量保存正则表达式
*/
Regex hitnumRegex = new Regex();
/**
* ===============================================*
* hits-num-regex begin
* ===============================================*
*/
Element hitnumRegexElt = (Element) website
.selectObject("hits-num-regex/regex");
/**
* hitnum-regex 点击数正则
*/
String hitnumRegexStr = hitnumRegexElt.getStringValue();
/**
* 组号
*/
int hitnumGgroupNo = Integer.valueOf(scriptRegexElt
.attributeValue("group"));
/**
* 匹配模式
*/
String hitnumRunType = hitnumRegexElt.attributeValue("run");
hitnumRegex.setRegexStr(hitnumRegexStr);
hitnumRegex.setGroup(hitnumGgroupNo);
hitnumRegex.setType(hitnumRunType);
regexPatternConfigChild.setScriptRegex(hitnumRegex);
// System.out.println(hitnumGgroupNo);
// System.out.println(hitnumRunType);
// System.out.println(hitnumRegexStr);
regexPatternConfigChild.setHitnumRegex(hitnumRegex);
// ===============hits-num-regex begin=============
regexPatternConfig
.setRegexPatternConfigChild(regexPatternConfigChild);
/**
* 添加每个网站点击数的配置this 不能省略
*/
this.regexPatternConfigs.add(regexPatternConfig);
// regexPatternConfigs.add(regexPatternConfig); 这里如果是不加上this是无法进行添加的
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
List<RegexPatternConfig> test = XmlConfigReader.getInstance()
.getRegexPatternConfigs();
for (RegexPatternConfig rc : test) {
System.out.println(rc.getWebsiteId());
System.out.println(rc.getRegexPatternConfigChild().toString());
}
}
}
分享到:
相关推荐
c++设计模式-结构型模式-...有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。
本资料来源于吕震宇博客,欢迎访问 ...经过整理,方便大家阅读。内容包括: 设计模式(22)-Strategy Pattern 设计模式(21)-Template Method Pattern ...C#设计模式(1) - 面向对象基本概念复习
博客地址:https://blog.csdn.net/xiaoluo5238/article/details/104592927 完整的代码,就是包名需要注意一下
c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...
《C++设计模式--基于Qt4开源跨平台开发框架》涉及到qt的基础知识和容器语法的使用,qt中的设计模式,是很好的资料。现与大家一起分享。免费下载。 由于上传大小有限制,所以分为两部分。 第一部分下载地址: ...
设计模式-策略模式-c++版 压缩包中有build好的程序和工程设计到的所有类的源码,还有一个Uml类图
c++设计模式-行为型模式-责任链模式;qt工程;c++简单源码; 责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的...
c++设计模式-行为型模式-访问者模式;qt工程;c++简单源码; 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新...
c++设计模式-结构型模式-适配器模式,其他工程,c++源码。适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
一故事一设计模式-LieBrother(完整版)
java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是简单工长模式及应用场景和应用场景的代码事例。
设计模式 - 抽象工厂模式
1. 24设计模式-桥接模式7.实例化2.桥接模式优缺点优:桥接模式概念介绍桥接模式uml图介绍原型模式-实例说明-模拟毛笔原型模式-实例代码DocumentB
设计模式-2020-11-25-巫政霖1
设计模式之---建造模式 1,建造模式属于对象的创建模式,是将一个产品的内部表象和产品的生产分割出来 2.使用原因:为了将构建复杂对象的过程和它的不见解耦; 3 使用情况:建造模式利用一个导演着对象和一个具体...
设计模式,一本软件构架的书籍。可服用面向对象的基础,主要讲解的是23种设计模式,每一种设计模式都很详细简单。
《C++设计模式--基于Qt4开源跨平台开发框架》涉及到qt的基础知识和容器语法的使用,qt中的设计模式,是很好的资料。现与大家一起分享。 2部分
c++设计模式-行为型模式-解释器模式;qt工程;c++简单源码; 解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式...
c++设计模式-行为型模式-迭代器模式;qt工程;c++简单源码;迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
设计模式-设计文档收集,大家可以一次下载多个文档来看