#定义:提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类,与工厂方法相类似。
package factory;
//针对数据库开发一个组件
public class AbstractFactoryTest {
public static void main(String[] args) {
//IDatabaseUtils iDatabaseUtils = new MysqlDataBaseUtils();
IDatabaseUtils iDatabaseUtils = new OracleDataBaseUtils();
IConnection connection = iDatabaseUtils.getConnection();
connection.connect();
ICommand command = iDatabaseUtils.getCommand();
command.command();
}
}
//变化部分:mysql oracle
//共性 connection连接的方法 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();
}
}
由许多工厂方法组合成接口。看单个接口的话就可以看成是工厂方法。即一系列和实现相关的组合起来。
并不是我们所学过的抽象,而是一系列的工厂方法。
#应用场景:
程序需要处理不同系列的相关产品,但是您不希望它依赖于这些产品的具体类时,
可以使用抽象工厂
优点:
1.可以确信你从工厂得到的产品彼此是兼容的。
2.可以避免具体产品和客户端代码之间的紧密耦合。
3.符合单一职责原则
4.符合开闭原则(修改关闭,扩展开放)
JDK应用场景:Connection接口 Driver 自行看源码!!!