设计模式--模板方法模式

实验 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>

运行效果 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值