设计模式---工厂方法模式


工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。

区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

类的文件:

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