模板方法模式
实验 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>