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