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