设计模式-----问题一

来源:互联网 发布:数据结构出栈算法程序 编辑:程序博客网 时间:2024/05/23 00:08

==============================================================================

在读取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());
        }
    }
}