抽象工厂模式
是所有形式的工厂模式中最为抽象和最具有一般性的一种形态,抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类
抽象工厂模式结构图:
抽象工厂模式之数据库操作工厂
抽象工厂类:
测试结果图:
抽象工厂模式优点:
1:抽象工厂模式隔离了类的生产,客户不需要知道什么呗创建
2:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3:增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。
抽象工厂类:
package AbstractFactory;
import AbstractProduct.Connection;
import AbstractProduct.Statement;
public interface DBFactory {
public Connection createConnection();
public Statement createStatement();
}
具体工厂类1:
package ConcreteFactory;
import AbstractFactory.DBFactory;
import AbstractProduct.Connection;
import AbstractProduct.Statement;
import ConcreteProduct.MysqlConnection;
import ConcreteProduct.MysqlStatement;
public class MysqlFactory implements DBFactory {
@Override
public Connection createConnection() {
return new MysqlConnection();
}
@Override
public Statement createStatement() {
return new MysqlStatement();
}
}
具体工厂类2:
package ConcreteFactory;
import AbstractFactory.DBFactory;
import AbstractProduct.Connection;
import AbstractProduct.Statement;
import ConcreteProduct.OracleConnection;
import ConcreteProduct.OracleStatement;
public class OracleFactory implements DBFactory {
@Override
public Connection createConnection() {
return new OracleConnection();
}
@Override
public Statement createStatement() {
return new OracleStatement();
}
}
抽象产品类A:
package AbstractProduct;
public interface Connection {
public void connect();
}
抽象产品类B:
package AbstractProduct;
public interface Statement {
public void executeStatement();
}
具体产品类A1:
package ConcreteProduct;
import AbstractProduct.Connection;
public class MysqlConnection implements Connection {
@Override
public void connect() {
// TODO Auto-generated method stub
System.out.println("连接mysql数据库");
}
}
具体产品类A2:
package ConcreteProduct;
import AbstractProduct.Statement;
public class MysqlStatement implements Statement {
@Override
public void executeStatement() {
System.out.println("执行Mysql数据库语句");
}
}
具体产品类B1:
package ConcreteProduct;
import AbstractProduct.Connection;
public class OracleConnection implements Connection {
@Override
public void connect() {
// TODO Auto-generated method stub
System.out.println("连接oracle数据库");
}
}
具体产品类B2:
package ConcreteProduct;
import AbstractProduct.Statement;
public class OracleStatement implements Statement {
@Override
public void executeStatement() {
System.out.println("执行oracle数据库语句");
}
}
测试类:
package Test;
import AbstractFactory.DBFactory;
import AbstractProduct.Connection;
import AbstractProduct.Statement;
import ConcreteFactory.OracleFactory;
public class test {
public static void main(String args[]){
DBFactory factory;
Connection connection;
Statement statement;
factory=new OracleFactory();
connection=factory.createConnection();
statement=factory.createStatement();
connection.connect();
statement.executeStatement();
}
}
抽象工厂模式:
测试结果图:
抽象工厂模式优点:
1:抽象工厂模式隔离了类的生产,客户不需要知道什么呗创建
2:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3:增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。