模式定义
提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。
代码示例
public class AbstractFactoryTest {public static void main(String[] args) {IDatabaseUtils iDatabaseUtils = new OracleDataBaseUtils();IConnection connection = iDatabaseUtils.getConnection();connection.connect();ICommand command = iDatabaseUtils.getCommand();command.command();}
}interface IConnection{void connect();
}interface ICommand{void command();
}interface IDatabaseUtils{IConnection getConnection();ICommand getCommand();
}class MysqlConnection implements IConnection{@Overridepublic void connect() {System.out.println("mysql connected.");}
}class OracleConnection implements IConnection{@Overridepublic void connect() {System.out.println("oracle connected.");}
}class MysqlCommand implements ICommand{@Overridepublic void command() {System.out.println("mysql command.");}
}class OracleCommand implements ICommand{@Overridepublic void command() {System.out.println("oracle command.");}
}class MysqlDataBaseUtils implements IDatabaseUtils{@Overridepublic IConnection getConnection() {return new MysqlConnection();}@Overridepublic ICommand getCommand() {return new MysqlCommand();}
}class OracleDataBaseUtils implements IDatabaseUtils{@Overridepublic IConnection getConnection() {return new OracleConnection();}@Overridepublic ICommand getCommand() {return new OracleCommand();}
}
应用场景
程序需要处理不同系列的相关产品,但是您不希望它依赖于这些产品的具体类时,
可以使用抽象工厂
模式优点
- 可以确信你从工厂得到的产品彼此是兼容的。
- 可以避免具体产品和客户端代码之间的紧密耦合。
- 符合单一职责原则
- 符合开闭原则
JDK源码中的应用
java.sql.Connection
java.sql.Driver
被技术耽误的文艺人,送上随手写的一首诗,欢迎评论区点评,记得关注哦!
你从哪里来,要到哪里去。
我从远方来,要去你心里。
三生有缘聚,此生终不悔。
草木向由生,往事皆太平。