工厂方法模式

工厂方法模式java

原文连接:https://blog.csdn.net/qq_42428264/article/details/90721656数据库

原文很nice想了解更多,建议看看dom

1、工厂方法实现工具

1. 建立用于实现具体业务对象的接口测试

package com.test;

public interface Logger {
    public void writeLog();
}

2. 建立两个业务对象,都实现Logger接口ui

2.1 数据日志业务spa

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

2.2 文件日志业务.net

package com.test;
public class FileLogger implements Logger {
    public void writeLog() {
        System.out.printin("文件日志记录");
    }
}

3. 建立实现业务工厂的接口或抽象类日志

package com.test;

public interface LoggerFactory {
    public Logger createLogger(); // 抽象工厂方法
}

4. 建立两个实现业务对象的工厂对象code

4.1 建立数据日志业务对象的工厂类

package com.test;

public class DatabaseLoggerFactory implements LoggerFactory {
    public Logger createLogger(){
        //链接数据库,代码省略
        //建立数据库日志记录器对象
        Logger logger= new DatabaseLogger();
        //初始化数据库日志记录器,代码省略
        return logger;
    }
}

4.2 建立文件日志业务对象的工厂类

package com.test;

public class FileLoggerFactory implements LoggerFactory{
    public Logger createlogger() {
        // 建立文件日志记录器对象
        Logger logger= new FileLogger();
        //建立文件,代码省略
        
        return logger;
    }
} 

5. 客户测试类

package com.test;

public class Client {
    public static vold main(string []args){
        LoggerFactory factory;
        Logger logger;
        factory = new FileloggerFactory();//可引入配置文件和反射机制实现
        logger = factory.createlogger();
        logger.writeLog();
    }
}

2、工厂方法的缺点与优势

缺点:

1. 增长了系统的复杂度,有更多的类须要编译和运行,会给系统带来一些额外的开销。

2. 增长了系统的抽象性和理解难度。

优势: 

1. 系统的可扩展性好,彻底符合开闭原则。

3、拓展

1. 客户端隐藏工厂方法结构图

2.经过config.xml配置文件调用日志

XMLUtil工具类
package com.test;

import java.io.IOException;

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

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XMLUtil {
public static Object getBean() {
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = null;
  try {
    builder = factory.newDocumentBuilder();
    Document document = builder.parse("src/design/config.xml");
    // 获取包含类名的文本节点
    NodeList list = document.getElementsByTagName("className");
    Node classNode = list.item(0).getFirstChild();
    String cName = classNode.getNodeValue().trim();
    Class c = Class.forName(cName);
    Object obj = c.newInstance();
    return obj;
  } catch (ParserConfigurationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  } catch (SAXException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
  return null;
}

}
相关文章
相关标签/搜索