1. 程式人生 > 其它 >設計模式---工廠方法模式

設計模式---工廠方法模式

工廠方法模式: 一個抽象產品類,可以派生出多個具體產品類。 一個抽象工廠類,可以派生出多個具體工廠類。 每個具體工廠類只能建立一個具體產品類的例項。

抽象工廠模式: 多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。 一個抽象工廠類,可以派生出多個具體工廠類。 每個具體工廠類可以建立多個具體產品類的例項,也就是建立的是一個產品線下的多個產品。

區別: 工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。 工廠方法模式的具體工廠類只能建立一個具體產品類的例項,而抽象工廠模式可以建立多個。

類的檔案:

package factory;

import java.sql.SQLException;

/**
 * 工廠方法  工廠類
 */
public interface JDBCFactory {

    public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
    //定義MySQL資料庫的連線地址
    public static final String DBURL = "jdbc:mysql://localhost:3306/restaurant?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
    //MySQL資料庫的連線使用者名稱
    public static final String DBUSER = "root";
    //MySQL資料庫的連線密碼
    public static final String DBPASS = "root";

}
package factory;

public interface Select extends JDBCFactory{

    Object doFactory(String sql);
}
package factory;

public interface Update extends JDBCFactory{
    Object doFactory(String sql);
}
package factory;

public interface Do extends Select,Update{
    @Override
    Object doFactory(String sql);
}
package factory;

import java.sql.*;

/**
 * 查詢 ===========工廠方法模式 產品類
 */
public class DoSelect implements Do {


    @Override
    public Object doFactory(String sql) {
        Connection connection = null;
        Statement statement = null;
        try {
            Class.forName(DBDRIVER);
            connection = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
            statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            return resultSet;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        return null;

    }
}
package factory;

import java.sql.*;

/**
 * 增刪改===========工廠方法模式 產品類
 */
public class DoUpdate implements Do{

    @Override
    public Object doFactory(String sql) {
        Connection connection = null;
        Statement statement = null;
        try {
            Class.forName(DBDRIVER);
            connection = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
            statement = connection.createStatement();
            int i = statement.executeUpdate(sql);
            return i;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(statement!=null){
                try {
                    statement.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
        return null;
    }
}

抽象工廠:JDBCFactory

具體工廠:Select Update

抽象產品:Do

具體產品:DoSelect DoUpdate

本文來自部落格園,作者:五行缺知識,轉載請註明原文連結:https://www.cnblogs.com/wyw123456/p/15696477.html