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

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class XMLUtil {
public static Object getBean() {
try {
//创建文档对象
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc;
doc = builder.parse(new File("config.xml"));
//获取包含charType类型的文本节点,此处可以改为className
NodeList nl = doc.getElementsByTagName("className");
Node classNode = nl.item(0).getFirstChild();
String cName = classNode.getNodeValue() ;
Class c=Class.forName(cName);
Object obj=c.newInstance();
return obj;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

}

  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

  

  

五.设计模式分析总结

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

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

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

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

其缺点是:

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

抽象工厂模式简单实例相关推荐

  1. java 抽象工厂模式简单实例

    抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生. 类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易.包含有 ...

  2. 抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...

    在工厂方法模式中,工厂只负责生产具体的产品,每一个具体的工厂对应着一个具体的产品,工厂方法也具有唯一性,如果有时候我们需要一个工厂方法提供多个产品而不是一个单一的产品,例如:海尔品牌不止生产海尔TV, ...

  3. 工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式 工厂模式于抽象工厂的区别 设计模式

    工厂模式 定义一个用于创建对象的接口,让子类实现具体类的创建.工厂将类的实例化延迟的子类. 良好的分装性.对于具体产品,只要知道产品名称即可(类名或字符串),封闭了对产品创建的细节. 屏蔽具体产品类. ...

  4. (2)GoF设计模式之抽象工厂模式及其实例

    定义: 产品等级结构:产品等级结构即产品的继承结构,例如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机不具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而 ...

  5. php 工厂模式运用实例,php工厂模式的实例

    * 单例模式:用于创建单一类型的唯一实例对象 * 工厂模式:用于创建多种类型的多个实例对象 //声明形状类 class Shape { //声明静态方法create,根据容器形状不同,创建不同图形类的 ...

  6. JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】

    目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式   看一个具体的需求 看一个披萨的项目:要便 ...

  7. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

  8. C#设计模式之:抽象工厂模式与反射

    抽象工厂模式[实例]: 定义一个用于创建对象的接口,让子类决定实例化哪一个类 UML 代码 class User {     private int _id;     public int Id { ...

  9. 设计模式(6)——抽象工厂模式(Abstract Factory Pattern,创建型)

    1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.抽象工厂模式(Abstract Factory Pattern)属于创建型模式,为创建一组相关或者相互依赖的对象(产品族)提供一个抽象 ...

  10. 设计模式-抽象工厂模式的应用场景及Java中对抽象工厂的应用

    1. 什么是抽象工厂模式 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们的类 抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用 ...

最新文章

  1. Udacity机器人软件工程师课程笔记(九)-ROS-Catkin包、工作空间和目录结构
  2. SQL Server中临时表与表变量的区别
  3. QT的QScriptEngine类的使用
  4. Scrapy保存到txt文件或者数据库里面
  5. 【P1063】 能量项链
  6. [bzoj1011] [HNOI2008]遥远的行星
  7. 如何查看PublicKeyToken
  8. python3flask教程_全面的Flask教程[3大部分]
  9. 2012年最佳30款免费 WordPress 主题
  10. 17.2融合关键词的文本增强
  11. 《C++代码设计与重用》——2.7 转型
  12. ACM模板(Java)
  13. 关于this指向问题及改变this指向的方法
  14. 【asp.net】VS 2008中文版下载
  15. 使用brew services管理服务
  16. Just Cause系列游戏品鉴
  17. 面试---谈好工资不吃亏
  18. php代码画表情包,canvas绘制表情包的示例代码
  19. 定义方法,实现两个整数的加法
  20. python 安装已下载好的模块

热门文章

  1. Autocad ET扩展工具汉化
  2. 车辆管理系统 c++
  3. 获取下载Qt安装包,Qt源码全国网址备忘录(不用注册Qt账户,即可下载各版本Qt安装包和Qt源码包)
  4. 【2022年Spring全家桶】Spring5.x 框架详解
  5. 数模(一)TSP问题
  6. 永洪BI还能这样玩?3招让用户权限管理不再繁琐
  7. 刘汝佳小白书-最长回文字串
  8. JavaWebServlet学生教师信息管理系统【JavaWeb】Servlet+Mysql+Jsp+Tomcat
  9. php微信聊天机器人_使用图灵机器人api搭建微信聊天机器人php实现
  10. linux asio,在Linux使用Asio:不可或缺的WineASIO