抽象工厂模式简单实例

这篇博客介绍了如何使用抽象工厂模式实现不同数据库(如MySQL和Oracle)的连接。通过创建DBFactory接口和具体工厂类(MysqlFactory和OracleFactory),实现了根据配置动态更换数据库连接,并展示了测试客户端的运行结果,强调了抽象工厂模式在增强程序可扩展性和管理相关产品族上的优势。同时,提到了模式的缺点,即增加新产品时需修改所有工厂类。
摘要由CSDN通过智能技术生成

创建型设计模式实训,利用抽象工厂模式实现不同数据库连接。要求按照P102页6.3.2实例说明,实现类图代码,并且编写测试客户端,给出动态更换数据库的运行结果。

  1. DBFactory
//定义抽象工厂类
public interface  DBFactory {
    //定义工厂方法 每一个产品对应的产品族定义一个工厂方法
    public Connection  createConnection();//定义createConnection方法
    public  Statement createStatement();//定义createStatement方法
}
  1. Connection
//抽象产品Connection

public interface Connection {
    public void connect();//业务方法connect的声明

}
  1. Statement
//抽象产品Statement
public interface Statement {
    public void stat();//声明业务方法stat
}
  1. MysqlFactory
//具体工厂类MysqlFactory
public class MysqlFactory implements DBFactory{
    @Override
    public Connection createConnection() {
        return new MysqlConnection();//实现DBFactory定义的工厂方法,用于创建具体产品对象 connection
    }

    @Override
    public Statement createStatement() {
        return new MysqlStatement();//实现DBFactory定义的工厂方法,用于创建具体产品对象 Statement
    }
}
  1. OracleFactory
//具体工厂类OracleFactory
public class OracleFactory implements DBFactory{

    @Override
    public Connection createConnection() {
     return new OracleConnection();//实现DBFactory定义的工厂方法,用于创建具体产品对象 connection
    }

    @Override
    public Statement createStatement() {
        return new OracleStatement();//实现DBFactory定义的工厂方法,用于创建具体产品对象 Statement
    }

}
  1. MysqlConnection
//具体产品类MysqlConnection
public class MysqlConnection implements Connection{
    @Override
    public void connect() {
        System.out.println("mysql connect");//实现了在Connection定义的方法connect
    }
}
  1. MysqlStatement
//具体产品类MysqlStatement
public class MysqlStatement implements Statement {
    @Override
    public void stat() {
        System.out.println("Mysql statement");//实现了在Statement定义的方法stat
    }
}
  1. OracleConnection
//具体产品类OracleConnection
public class OracleConnection implements Connection {
    @Override
    public void connect() {
        System.out.println("oracle connection");//实现了在Connection定义的方法connect
    }
}
  1. OracleStatement
//具体产品类OracleStatement
public class OracleStatement implements Statement{

    @Override
    public void stat() {
        System.out.println("oracle statement");//实现了在Statement定义的方法stat
    }
}

  1. Test
     
    public class Test {
    public static void main(String args[]) {
    DBFactory factory;
    Connection con;
    Statement stat;
    factory=(DBFactory)XMLUtil.getBean();
    con=factory.createConnection();
    con.connect();
    stat=factory.createStatement();
    stat.stat();
    }
    
    }

  • 运行结果截图
  1. OracleFactory

  1. MySQLFactory

  

  

五.设计模式分析总结

     抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。抽象工厂模式除了具有工厂方法模式的优点外,其他主要优点如下

可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。

当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。

抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则。

其缺点是:

当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值