9/16

软件设计                  石家庄铁道大学信息学院

 

实验 24:模板方法模式

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

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

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

 
   

 


[实验任务一]:数据库连接

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

实验要求:

1.  画出对应的类图;

 

2.  提交源代码;

// 抽象类:数据库操作模板类

abstract class DatabaseOperation {

    // 连接数据库

    abstract void connDB();

    // 打开数据库

    void openDB() {

        System.out.println("Opening database...");

    }

    // 使用数据库

    void useDB() {

        System.out.println("Using database...");

    }

    // 关闭数据库

    void closeDB() {

        System.out.println("Closing database...");

    }

    // 模板方法

    final void templateMethod() {

        connDB();

        openDB();

        useDB();

        closeDB();

    }

}

 

// 具体类:MySQL数据库操作

class MysqlDatabase extends DatabaseOperation {

    void connDB() {

        System.out.println("Connecting to MySQL database...");

    }

}

 

// 具体类:SQL Server数据库操作

class SqlServerDatabase extends DatabaseOperation {

    void connDB() {

        System.out.println("Connecting to SQL Server database...");

    }

}

 

// 具体类:Oracle数据库操作

class OracleDatabase extends DatabaseOperation {

    void connDB() {

        System.out.println("Connecting to Oracle database...");

    }

}

 

// 客户端测试类

public class TemplateMethodPatternTest {

    public static void main(String[] args) {

        DatabaseOperation dbOperation;

        dbOperation = new MysqlDatabase();

        dbOperation.templateMethod();

 

        dbOperation = new SqlServerDatabase();

        dbOperation.templateMethod();

 

        dbOperation = new OracleDatabase();

        dbOperation.templateMethod();

    }

}

// 连接数据库的具体方法

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

 

class MysqlDatabase extends DatabaseOperation {

    private final String url = "jdbc:mysql://localhost:3306/yourDatabase";

    private final String user = "yourUsername";

    private final String password = "yourPassword";

 

    @Override

    void connDB() {

        try {

            // 加载MySQL JDBC驱动

            Class.forName("com.mysql.cj.jdbc.Driver");

            // 建立连接

            System.out.println("Connecting to MySQL database...");

            connection = DriverManager.getConnection(url, user, password);

        } catch (ClassNotFoundException | SQLException e) {

            e.printStackTrace();

        }

    }

 

    @Override

    void closeDB() {

        if (connection != null) {

            try {

                connection.close();

                System.out.println("MySQL database connection closed.");

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}

class SqlServerDatabase extends DatabaseOperation {

    private final String url = "jdbc:sqlserver://localhost:1433;databaseName=yourDatabase";

    private final String user = "yourUsername";

    private final String password = "yourPassword";

 

    @Override

    void connDB() {

        try {

            // 加载SQL Server JDBC驱动

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

            // 建立连接

            System.out.println("Connecting to SQL Server database...");

            connection = DriverManager.getConnection(url, user, password);

        } catch (ClassNotFoundException | SQLException e) {

            e.printStackTrace();

        }

    }

 

    @Override

    void closeDB() {

        if (connection != null) {

            try {

                connection.close();

                System.out.println("SQL Server database connection closed.");

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}

class OracleDatabase extends DatabaseOperation {

    private final String url = "jdbc:oracle:thin:@localhost:1521:yourSID";

    private final String user = "yourUsername";

    private final String password = "yourPassword";

 

    @Override

    void connDB() {

        try {

            // 加载Oracle JDBC驱动

            Class.forName("oracle.jdbc.driver.OracleDriver");

            // 建立连接

            System.out.println("Connecting to Oracle database...");

            connection = DriverManager.getConnection(url, user, password);

        } catch (ClassNotFoundException | SQLException e) {

            e.printStackTrace();

        }

    }

 

    @Override

    void closeDB() {

        if (connection != null) {

            try {

                connection.close();

                System.out.println("Oracle database connection closed.");

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}

3.  注意编程规范。

 

 

posted @ 2024-09-16 09:28  Hbro  阅读(18)  评论(0)    收藏  举报