Вы знакомы с JDBC ?Это одна и вся (абстрактная) фабрика.Это хороший пример из реальной жизни.
// Factory method. Loads the driver by given classname. It actually returns a
// concrete Class<Driver>. However, we don't need it here, so we just ignore it.
// It can be any driver class name. The MySQL one here is just an example.
// Under the covers, it will do DriverManager.registerDriver(new Driver()).
Class.forName("com.mysql.jdbc.Driver");
// Abstract factory. This lets the driver return a concrete connection for the
// given URL. You can just declare it against java.sql.Connection interface.
// Under the covers, the DriverManager will find the MySQL driver by URL and call
// driver.connect() which in turn will return new ConnectionImpl().
Connection connection = DriverManager.getConnection(url);
// Abstract factory. This lets the driver return a concrete statement from the
// connection. You can just declare it against java.sql.Statement interface.
// Under the covers, the MySQL ConnectionImpl will return new StatementImpl().
Statement statement = connection.createStatement();
// Abstract factory. This lets the driver return a concrete result set from the
// statement. You can just declare it against java.sql.ResultSet interface.
// Under the covers, the MySQL StatementImpl will return new ResultSetImpl().
ResultSet resultSet = statement.executeQuery(sql);
Вам не нужно, чтобы в вашем коде была отдельная строка драйвера JDBC import
.Вам не нужно делать import com.mysql.jdbc.ConnectionImpl
или что-то.Вы просто должны все заявить против java.sql.*
.Вам не нужно делать connection = new ConnectionImpl();
самостоятельно.Вы просто должны получить его из абстрактной фабрики как часть стандартного API.
Если вы сделаете имя класса драйвера JDBC переменной, которую можно настраивать извне (например, файл свойств), и будете писать SQL-запросы, совместимые с ANSI, то вам никогда не потребуется переписывать, перекомпилировать, перестраивать и распространять приложение Javaдля каждого поставщика базы данных и / или драйвера JDBC, о котором знает мир.Вам просто нужно удалить нужный JAR-файл драйвера JDBC в пути к классам среды выполнения и предоставить конфигурацию с помощью некоторого файла (свойств) без необходимости изменять какую-либо строку кода Java всякий раз, когда вы хотите переключить БД или повторно использовать приложение в другой БД.
Это сила интерфейсов и абстрактных фабрик.
Еще один известный пример из реальной жизни - Java EE.Замените «JDBC» на «Java EE», а «драйвер JDBC» на «Сервер приложений Java EE» (WildFly, TomEE, GlassFish, Liberty и т. Д.).
См. Также: