设计模式-抽象工厂模式

本文探讨如何使用抽象工厂模式来改进数据库操作的性能。系统允许用户自定义数据库连接对象Connection和语句对象Statement,支持Oracle、MySQL等不同类型的数据库,并可通过配置文件动态切换。文章通过类图和Java代码实现,展示了抽象工厂模式在实际问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

某系统为了改进数据库操作的性能,用户可以自定义数据库连接对象Connection和语句对象Statement,针对不同类型的数据库提供不同的连接对象和语句对象,例如提供OracleMySQL专用连接类和语句类,而且用户可以通过配置文件等方式根据实际需要动态更换系统数据库。使用抽象工厂模式设计该系统,要求绘制对应的类图并使用Java语言编程模拟实现。

类图:


实现代码:

抽象工厂databaseFactory类:

public  abstract class databaseFactory {

    public abstract Connection createConnection();

    public abstract Statement createStatement();

 

}

具体工厂MysqlFactory 类:

public class MysqlFactory extends databaseFactory {

    @Override

    public Connection createConnection() {

 

        return new mysqlConnection();

    }

 

    @Override

    public Statement createStatement() {

 

        return new mysqlStatement();

    }

}

具体工厂OracleFactory 类:

public class OracleFactory extends databaseFactory {

    @Override

    public Connection createConnection() {

 

        return new oracleConnection();

    }

 

    @Override

    public Statement createStatement() {

 

        return new oracleStatement();

    }

}

抽象产品Connection  类:

public class Connection  {

    public void connection(){}

}

 

抽象产品Statement 类:

public class Statement {

    public void sattement(){}

}

 

 

 

具体产品mysqlConnection 类:

public class mysqlConnection extends Connection {

    public void connection() {

        System.out.println("提供MySql连接对象");

    }

}

 

具体产品mysqlStatement 类:

public class mysqlStatement extends Statement{

    public void sattement() {

        System.out.println("提供mysql语句对象");

    }

}

具体产品oracleConnection 类:

public class oracleConnection extends Connection {

 

    public void connection() {

 

        System.out.println("提供oracle连接对象");

    }

}

 

具体产品oracleStatement 类:

public class oracleStatement extends Statement {

    public void sattement() {

        System.out.println("提供oracle语句对象");

工具类XMLUtil 

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;

import java.io.File;

 

public class XMLUtil {

    //该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象

    public static Object getBean() throws Exception {

        //创建DOM文档对象

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

        Document document;

        document = documentBuilder.parse(new File("config.xml"));

        //获取包含类名的文本结点

        NodeList nodeList = document.getElementsByTagName("databaseType");

        Node databaseTypeNode = nodeList.item(0).getFirstChild();

        String databaseType = databaseTypeNode.getNodeValue().trim();

        //通过类名生成实例对象并将其返回

        Class clazz  = Class.forName(databaseType+"Factory");

        Object object = clazz.newInstance();

        return object;

    }

}

客户端Main:

public class Main {

 

    public static void main(String[] args) {

 

       databaseFactory daFactory = null;

       Connection connection ;

       Statement statement;

        try {

            daFactory = (databaseFactory)XMLUtil.getBean();

        } catch (Exception e) {

            e.printStackTrace();

        }

 

        if (daFactory==null){

            System.out.println("未获取到对象");

        }else {

            connection = daFactory.createConnection();

            statement = daFactory.createStatement();

            connection.connection();

            statement.sattement();

        }

    }

}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值