1. 定义

提供一个创建一系列相关或者互相依赖对象的接口,而无需指定它们具体的类

2. 实现

定义接口:

  1. interface IConnection{
  2. void connect();
  3. }
  4. interface ICommand{
  5. void command();
  6. }
  7. interface IDatabaseUtils{
  8. IConnection getConnection();
  9. ICommand getCommand();
  10. }

定义实现类:

  1. class MysqlConnection implements IConnection{
  2. @Override
  3. public void connect() {
  4. System.out.println("mysql connect.");
  5. }
  6. }
  7. class MysqlCommand implements ICommand{
  8. @Override
  9. public void command() {
  10. System.out.println("mysql command.");
  11. }
  12. }
  13. class MysqlDatabaseUtils implements IDatabaseUtils{
  14. @Override
  15. public IConnection getConnection() {
  16. return new MysqlConnection();
  17. }
  18. @Override
  19. public ICommand getCommand() {
  20. return new MysqlCommand();
  21. }
  22. }
  1. class OracleConnection implements IConnection{
  2. @Override
  3. public void connect() {
  4. System.out.println("oracle connect.");
  5. }
  6. }
  7. class OracleCommand implements ICommand{
  8. @Override
  9. public void command() {
  10. System.out.println("oracle command");
  11. }
  12. }
  13. class OracleDatabseUtils implements IDatabaseUtils{
  14. @Override
  15. public IConnection getConnection() {
  16. return new OracleConnection();
  17. }
  18. @Override
  19. public ICommand getCommand() {
  20. return new OracleCommand();
  21. }
  22. }

使用:

  1. public static void main(String[] args) {
  2. //mysql
  3. IDatabaseUtils databaseUtils=new MysqlDatabaseUtils();
  4. //oracle
  5. // IDatabaseUtils databaseUtils=new OracleDatabseUtils();
  6. IConnection connection = databaseUtils.getConnection();
  7. connection.connect();
  8. ICommand command = databaseUtils.getCommand();
  9. command.command();
  10. }

3. 应用场景

程序需要处理不同系列的相关产品,但是您不希望它依赖于这些产品的 具体类时, 可以使用抽象工厂

4. 优点

  1. 可以确信你从工厂得到的产品彼此是兼容的。
  2. 可以避免具体产品和客户端代码之间的紧密耦合。

    1. 符合单一职责原则
  3. 符合开闭原则

    5. JDK源码应用

    1. java.sql.Connection
    2. java.sql.Driver