设计模式之工厂方法模式02

前言:

        在简单工厂模式之后,进阶版当然就是工厂方法模式啦~,想看简单工厂方法模式,请看我的名为“设计模式之简单工厂模式01”的博客。

1.内容简述:

        用工厂方法模式,实现用多种途径保存系统的运行日志,包括文件记录和数据库记录等。

2.实现过程:

(1).定义一个日志记录器接口Logger

package com.hnucm.wb.factorymethodlogger;

public interface Logger {

    public void writeLog();

}

(2).定义具体产品角色,FileLogger和DatabaseLogger,实现Logger接口

 

package com.hnucm.wb.factorymethodlogger;

public class FileLogger implements Logger{
    @Override
    public void writeLog() {
        System.out.println("文件日志记录");
    }
}
package com.hnucm.wb.factorymethodlogger;

public class DatabaseLogger implements Logger{
    @Override
    public void writeLog() {
        System.out.println("数据库日志记录");
    }
}

 

(3).定义一个日志记录工厂接口LoggerFactory

package com.hnucm.wb.factorymethodlogger;

public interface LoggerFactory {
    public Logger createLogger();
}

 

(4).定义具体工厂角色,FileLoggerFactory和DatabaseLoggerFactory,实现LoggerFactory接口

package com.hnucm.wb.factorymethodlogger;

public class FileLoggerFactory implements LoggerFactory{

    @Override
    public Logger createLogger() {
        Logger logger=new FileLogger();
        return logger;
    }
}
package com.hnucm.wb.factorymethodlogger;

public class DatabaseLoggerFactory implements LoggerFactory{

    @Override
    public Logger createLogger() {
        Logger logger=new DatabaseLogger();
        return logger;
    }
}

 

(5).将参数存入配置文件,使得在需要变换不同的方式时,无需修改源代码,只要修改配置文件即可。

<?xml version="1.0" encoding="UTF-8" ?>
<config>
    <className>com.hnucm.wb.factorymethodlogger.FileLoggerFactory</className>
</config>
package com.hnucm.wb.factorymethodlogger;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public class XMLUtils {

    public static Object getChartType() {
        try {
            DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder();
            Document document;
            document= (Document) documentBuilder.parse("D:\\Learner\\idea-example\\designPatterns\\src\\main\\java\\com\\hnucm\\wb\\factorymethodlogger\\config.xml");

            NodeList nodeList=document.getElementsByTagName("className");
            Node classNode=nodeList.item(0).getFirstChild();
            String chartType=classNode.getNodeValue().trim();
            Object obj=Class.forName(chartType).newInstance();
            return obj;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }



    }


}

 

(6). 定义一个客户测试类

package com.hnucm.wb.factorymethodlogger;

public class Client {
    public static void main(String[] args){
        LoggerFactory loggerFactory;
        Logger logger;
        loggerFactory=(LoggerFactory) XMLUtils.getChartType();//创建日志文件工厂
        logger=loggerFactory.createLogger();//创建日志文件对象
        logger.writeLog();
    }
}

(7).运行结果

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值