抽象工厂模式简单实例

创建型设计模式实训,利用抽象工厂模式实现不同数据库连接。要求按照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

  

  

五.设计模式分析总结

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

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

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

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

其缺点是:

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

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值