设计模式---工厂方法模式
工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。
区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
类的文件:
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