模板方法模式

发布时间 2024-01-03 23:31:51作者: Men!

实验 24:模板方法模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解模板方法模式的动机,掌握该模式的结构;

2、能够利用模板方法模式解决实际问题。

[实验任务]:数据库连接
对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()、useDB()、closeDB()四个方法分别对应这四个步骤。对于不同类型的数据库(如SQL Server和Oracle),其操作步骤都一致,只是连接数据库connDB()方法不同,现使用模板方法模式对其进行设计。

源代码

/**
 * 数据库操作模版类
 */
public abstract class DatabaseTemplate
{
    public void templateMethod()
    {
        connDB();
 
        openDB();
 
        useDB();
 
        closeDB();
    }
 
    /**
     * 连接数据库
     */
    public abstract void connDB();
 
    /**
     * 打开数据库
     */
    public void openDB()
    {
        System.out.println("打开数据库");
 
    }
 
    /**
     * 使用数据库
     */
    public void useDB()
    {
        System.out.println("使用数据库");
 
    }
 
    /**
     * 关闭数据库
     */
    public void closeDB()
    {
        System.out.println("关闭数据库");
 
    }
}
 
 
/**
 * Mysql数据库
 */
public class Mysql extends DatabaseTemplate
{
    @Override
    public void connDB()
    {
        System.out.println("连接Mysql数据库");
    }
}
 
 
/**
 * Oracle数据库
 */
public class Oracle extends DatabaseTemplate
{
    @Override
    public void connDB()
    {
        System.out.println("连接Oracle数据库");
    }
}
 
 
/**
 * SqlServer数据库
 */
public class SQLServer extends DatabaseTemplate
{
    @Override
    public void connDB()
    {
        System.out.println("连接SQLServer数据库");
 
    }
}
 
 
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
{
    public static Object getBean()
    {
        try
        {
            //创建DOM文档对象
            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dFactory.newDocumentBuilder();
            Document doc = builder.parse(new File("src/main/resources/config24.xml"));
 
            //获取包含类名的文本节点
            NodeList nl = doc.getElementsByTagName("className");
            Node classNode = nl.item(0).getFirstChild();
            String cName = classNode.getNodeValue();
 
            //通过类名生成实例对象并将其返回
            Class c = Class.forName(cName);
            Object obj = c.newInstance();
            return obj;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }
}
 
 
/**
 * @author mendianyu
 */
public class Client
{
    public static void main(String[] args)
    {
        DatabaseTemplate database;
 
        database = (DatabaseTemplate) XMLUtil.getBean();
 
        database.templateMethod();
    }
}

 config24.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <className>Tutorial_24.Mysql</className>
</config>