Java设计模式–抽象工厂模式
-
定义
提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们具体的类 -
实现
光看定义是不是有一点枯燥,直接上代码吧
public class AbstractFactoryTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// IDatabaseUtils iDatabaseUtils=new MysqlDataBaseUtils();
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() {
// TODO Auto-generated method stub
System.out.println("mysql connected");
}
}
class MysqlCommend implements ICommand{
@Override
public void command() {
// TODO Auto-generated method stub
System.out.println("mysql command.");
}
}
class MysqlDataBaseUtils implements IDatabaseUtils{
@Override
public IConnection getConnection() {
// TODO Auto-generated method stub
return new MysqlConnection();
}
@Override
public ICommand getCommand() {
// TODO Auto-generated method stub
return new MysqlCommend();
}
}
class OracleConnection implements IConnection{
@Override
public void connect() {
// TODO Auto-generated method stub
System.out.println("Oracle connected");
}
}
class OracleCommand implements ICommand{
@Override
public void command() {
// TODO Auto-generated method stub
System.out.println("Oracle Command.....");
}
}
class OracleDataBaseUtils implements IDatabaseUtils{
@Override
public IConnection getConnection() {
// TODO Auto-generated method stub
return new OracleConnection();
}
@Override
public ICommand getCommand() {
// TODO Auto-generated method stub
return new OracleCommand();
}
}
代码看起来有点长,但是基本原理却是比较显而易见的,可以看出,抽象工厂的原理和工厂相差无几,但是有一点要说明一下,不要望文生义,认为抽象工厂就是由抽象类和抽象方法组成,其实不一定。
-
应用场景
程序需要处理不同系列的相关产品,但是您不希望他依赖于这些产品的具体类时,可以使用抽象工厂 -
优点
1.可以确信你从工厂得到的产品是彼此兼容的。
2.可以避免具体产品和客户代码之间的紧密耦合
3.符合单一职责原则
4.符合开闭原则 -
应用
jdk sql中的中的Connect和Driver