抽象工厂模式定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
数据库查询是抽象工厂模式的典型示例
public interface Connection {
public void open();
public void close();
}
public class MysqlConnection implements Connection {
@Override
public void open() {
System.out.println("create mysql connection");
}
@Override
public void close() {
System.out.println("close mysql connection");
}
}
public class OracleConnection implements Connection {
@Override
public void open() {
System.out.println("create oracle connection");
}
@Override
public void close() {
System.out.println("close oracle connection");
public class Client {
public void execute(){
Connection mysqlConn = new MysqlConnection();
mysqlConn.open();
}
}
这种设计方式肯定是不行的,我们至少应该使用简单工厂对数据库连接类的创建进行封装,以使客户端与具体的数据库连接类解耦
public class ConnectionFactory {
public Connection getConnection(String name){
switch(name){
case "mysql":
return new MysqlConnection();
case "oracle":
return new OracleConnection();
default:
return new MysqlConnection();
}
}
}
public class Client {
public void execute(){
ConnectionFactory connectionFactory = new ConnectionFactory();
Connection mysqlConn = connectionFactory.getConnection("mysql");
mysqlConn.open();
}
}
我们之前已经介绍过简单工厂的缺点,如果增加新的数据库连接类型,依然需要对工厂进行修改,解决方式是工厂方法模式
public interface ConnectionFactory {
public Connection getConnection();
}
public class MysqlConnectionFactory implements ConnectionFactory {
public Connection getConnection(){
return new MysqlConnection();
}
}
public class OracleConnectionFactory implements ConnectionFactory {
public Connection getConnection(){
return new OracleConnection();
}
}
public class Client {
public void execute(){
ConnectionFactory mysqlConnectionFactory = new MysqlConnectionFactory();
Connection mysqlConn = mysqlConnectionFactory.getConnection();
mysqlConn.open();
}
}
我们知道在创建数据库连接的时候,仅仅获取Connection对象是不够的,还需要获取Session对象
这就是抽象方法模式的定义了
工厂方法模式中,每个工厂仅能构建一个抽象类的特定实例
抽象方法模式中,每个工厂可以构建所有抽象类的一个特定实例