论文部分内容阅读
摘 要:在设计与开发网上购物系统各个模块的过程中,综合、灵活地使用了Java的常用设计模式。其中,为了提供对不同数据库系统的良好支持,应用简单工厂模式实现了产品管理模块的相关功能,有效增强了系统的可扩展性和可维护性。
关键词:设计模式;简单工厂模式;数据库系统
中图分类号:TP311.10
产品管理是网上购物系统中最重要的模块之一,前台用户和后台管理员的大部分操作都会涉及产品模块的具体功能。根据客户对系统所支持的用户量、开发成本等不同因素的实际需求,系统定制时有可能会选择不同的数据库系统作为数据源,这就要求我们开发的系统需要提供对不同数据库系统的良好支持。因此,在数据源发生改变,例如,从My SQL数据库变更为SQL Server的时候,应能使得只需要修改少量的代码或配置文件,就可以实现购物网站对不同数据库系统的支持。
1 设计模式简介
设计模式(Design Pattern)是一套被反复使用,并且经过分类编目的代码设计经验总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码的可靠性。设计模式从应用的角度被分为三个大的类型,分别是创建型设计模式、结构型设计模式和行为型设计模式。
创建型模式,就是用来创建对象的模式,它抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。简单工厂模式属于创建型模式,又被称为静态工厂方法(Static Factory Method)模式。它是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
2 简单工厂模式在产品管理模块中的应用
2.1 产品管理模块概述
产品管理模块采用三层模型进行开发。DAO层负责数据库的相关操作,向下直接访问数据库系统,同时向上层的Product Manager类提供各种操作数据库的服务;Product Manager类位于业务逻辑层,向下调用DAO层提供的各种接口,向上给前台的页面展示提供各种服务;前台的jsp页面直接调用Product Manager类提供的各种方法实现丰富的展示效果。采用分层的模型虽然增加了一定的代码开发工作量,但分层的方式带来的好处也是显而易见的。不但有效降低了各个模块之间的耦合性,很好的实现了相关类内部的封装,而且提高了代码的可扩展性和可维护性,当某一层服务的内部逻辑发生改变时,对外提供的接口不需要改变,使需要修改的代码量减至最少。
2.2 简单工厂模式的引入
项目初期,鉴于客户对系统所支持的用户量要求不高,并且开发成本也比较低,项目组选择了My SQL数据库。相应的,对于产品管理模块的设计来说,最基本的实现方式是在Product DAO类中,提供对My SQL数据库进行操作的各种方法,程序中涉及的SQL语句也是只有在My SQL数据库下才可以运行的。当然,考虑到系统后续的扩展性,以及应能提供更强大的数据管理能力和更好的操作性能,可能会选择诸如SQL Server、Oracle等高端数据库产品。这种情况下,必然要修改Product DAO类中的大量代码,系统的灵活性是很差的。Java程序设计提倡“面向接口”编程,即控制反转。因此,我们重新设计了Product DAO类,将其抽象为一个接口,而真正实现对不同数据库系统进行具体操作的代码,放在Product MysqlDAO、Product SQL ServerDAO等实现了Product DAO接口的类当中。
程序优化到这一步,已经初步实现了支持不同数据库系统的功能。Product Manager类中将持有Product DAO接口的一个引用,当网上购物系统所使用的数据源变更时,我们只需在Product Manager类的setProduct DAO方法中,实例化不同的子类对象即可。但实际上,代码还可以继续优化使得程序的灵活性得到进一步的提高。我们采用了简单工厂设计模式。选择工厂模式的好处在于,可以更加方便的更改应用程序,方便对系统进行扩展。例如,当我们需要在Product DAO接口的基础上再增加一个实现了该接口,并且支持其它数据库系统的子类时,在之前的设计中需要把以前使用Product DAO接口的地方都修改为创建一个新的子类对象,这样做显然也增加了模块间的耦合度。通过使用工厂模式,统一管理对象的创建过程,并且在我们的代码中只要做一处修改就可以了。
我们构建了一个工厂类Product DAO Factory,对外提供create Product DAO方法,把创建ProductDAO接口对象的处理封装在该简单工厂的内部。对于ProductManager类而言,不需要再了解ProductDAO的实现细节,工厂类ProductDAOFactory统一管理ProductDAO对象的创建过程,其它类只需要调用它的createProductDAO方法即可获得ProductDAO的对象从而使用其中的方法操作数据库。工厂类与ProductDAO接口和各个实现了该接口的子类之间的关系如图1所示。
图1 采用简单工厂模式设计UML图
为了最大限度的提高程序的灵活性,可以将数据源的信息记录在配置文件里,根据从配置文件里读出的内容,来决定所创建的ProductDAO接口的对象实例。项目中我们使用.properties文件来管理配置信息,例如,添加“DateBase=MySQL”至sysconfig.properties文件,接下来,给出简单工厂ProductDAOFactory类的关键部分实现代码如下。
//创建ProductDAOFactory对象
if(pdFactory == null) {
pdFactory = new ProductDAOFactory();
}
//从sysconfig.properties读取DataBase的值,结果存放在字符串变量strDB中
if(strDB.equals(“MySQL”)) {
productDAO = new ProductMySQLDAO();
}
else if (strDB.equals(“SQLSERVER”)) {
productDAO = new ProductSQLServerDAO();
}
//else根据DataBase的值创建不同的实现了ProductDAO接口的对象
在简单工厂类ProductDAOFactory的代码实现中,我们把实例化简单工厂对象和ProductDAO对象的过程放在静态语句块中,即在ProductDAOFactory类被加载的时候就完成了对象的创建,从而使得创建对象的代码不用每次调用工厂类的时候都执行一遍。
3 结束语
本文以网上购物系统中的产品管理模块的设计与实现为例,讨论了设计模式在软件开发过程中的应用,展示了设计模式在面向对象的程序设计中的重要作用。针对产品管理模块中提供对各种数据库系统的支持这一具体问题,提出了简单工厂模式这一设计思路并给出了具体解决方案。通过工厂模式的应用,使系统的结构更加合理,开发效率显著提高,尤其是系统的可扩展性、可维护性大大的增强。如今,各种设计模式已经在软件产品的设计与开发过程中得到越来越广泛的应用。
参考文献:
[1]徐宏喆,侯迪.使用软件设计模式教程[M].北京:清华大学出版社,2009:103-112.
[2]耿祥义,郝丽.JAVA设计模式在视频监控系统软件设计中的应用[J].电脑知识与技术,2010,6(30):8490-8492.
[3]秦澎涛,王苏文.简单工厂模式在数据访问层中的应用[J].计算机应用技术,2009,30(7):1799-1801.
作者简介:冯贺(1982.08-),男,河南省安阳县人,教师,助教,硕士研究生,研究方向:信息技术、数据挖掘。
关键词:设计模式;简单工厂模式;数据库系统
中图分类号:TP311.10
产品管理是网上购物系统中最重要的模块之一,前台用户和后台管理员的大部分操作都会涉及产品模块的具体功能。根据客户对系统所支持的用户量、开发成本等不同因素的实际需求,系统定制时有可能会选择不同的数据库系统作为数据源,这就要求我们开发的系统需要提供对不同数据库系统的良好支持。因此,在数据源发生改变,例如,从My SQL数据库变更为SQL Server的时候,应能使得只需要修改少量的代码或配置文件,就可以实现购物网站对不同数据库系统的支持。
1 设计模式简介
设计模式(Design Pattern)是一套被反复使用,并且经过分类编目的代码设计经验总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码的可靠性。设计模式从应用的角度被分为三个大的类型,分别是创建型设计模式、结构型设计模式和行为型设计模式。
创建型模式,就是用来创建对象的模式,它抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。简单工厂模式属于创建型模式,又被称为静态工厂方法(Static Factory Method)模式。它是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
2 简单工厂模式在产品管理模块中的应用
2.1 产品管理模块概述
产品管理模块采用三层模型进行开发。DAO层负责数据库的相关操作,向下直接访问数据库系统,同时向上层的Product Manager类提供各种操作数据库的服务;Product Manager类位于业务逻辑层,向下调用DAO层提供的各种接口,向上给前台的页面展示提供各种服务;前台的jsp页面直接调用Product Manager类提供的各种方法实现丰富的展示效果。采用分层的模型虽然增加了一定的代码开发工作量,但分层的方式带来的好处也是显而易见的。不但有效降低了各个模块之间的耦合性,很好的实现了相关类内部的封装,而且提高了代码的可扩展性和可维护性,当某一层服务的内部逻辑发生改变时,对外提供的接口不需要改变,使需要修改的代码量减至最少。
2.2 简单工厂模式的引入
项目初期,鉴于客户对系统所支持的用户量要求不高,并且开发成本也比较低,项目组选择了My SQL数据库。相应的,对于产品管理模块的设计来说,最基本的实现方式是在Product DAO类中,提供对My SQL数据库进行操作的各种方法,程序中涉及的SQL语句也是只有在My SQL数据库下才可以运行的。当然,考虑到系统后续的扩展性,以及应能提供更强大的数据管理能力和更好的操作性能,可能会选择诸如SQL Server、Oracle等高端数据库产品。这种情况下,必然要修改Product DAO类中的大量代码,系统的灵活性是很差的。Java程序设计提倡“面向接口”编程,即控制反转。因此,我们重新设计了Product DAO类,将其抽象为一个接口,而真正实现对不同数据库系统进行具体操作的代码,放在Product MysqlDAO、Product SQL ServerDAO等实现了Product DAO接口的类当中。
程序优化到这一步,已经初步实现了支持不同数据库系统的功能。Product Manager类中将持有Product DAO接口的一个引用,当网上购物系统所使用的数据源变更时,我们只需在Product Manager类的setProduct DAO方法中,实例化不同的子类对象即可。但实际上,代码还可以继续优化使得程序的灵活性得到进一步的提高。我们采用了简单工厂设计模式。选择工厂模式的好处在于,可以更加方便的更改应用程序,方便对系统进行扩展。例如,当我们需要在Product DAO接口的基础上再增加一个实现了该接口,并且支持其它数据库系统的子类时,在之前的设计中需要把以前使用Product DAO接口的地方都修改为创建一个新的子类对象,这样做显然也增加了模块间的耦合度。通过使用工厂模式,统一管理对象的创建过程,并且在我们的代码中只要做一处修改就可以了。
我们构建了一个工厂类Product DAO Factory,对外提供create Product DAO方法,把创建ProductDAO接口对象的处理封装在该简单工厂的内部。对于ProductManager类而言,不需要再了解ProductDAO的实现细节,工厂类ProductDAOFactory统一管理ProductDAO对象的创建过程,其它类只需要调用它的createProductDAO方法即可获得ProductDAO的对象从而使用其中的方法操作数据库。工厂类与ProductDAO接口和各个实现了该接口的子类之间的关系如图1所示。
图1 采用简单工厂模式设计UML图
为了最大限度的提高程序的灵活性,可以将数据源的信息记录在配置文件里,根据从配置文件里读出的内容,来决定所创建的ProductDAO接口的对象实例。项目中我们使用.properties文件来管理配置信息,例如,添加“DateBase=MySQL”至sysconfig.properties文件,接下来,给出简单工厂ProductDAOFactory类的关键部分实现代码如下。
//创建ProductDAOFactory对象
if(pdFactory == null) {
pdFactory = new ProductDAOFactory();
}
//从sysconfig.properties读取DataBase的值,结果存放在字符串变量strDB中
if(strDB.equals(“MySQL”)) {
productDAO = new ProductMySQLDAO();
}
else if (strDB.equals(“SQLSERVER”)) {
productDAO = new ProductSQLServerDAO();
}
//else根据DataBase的值创建不同的实现了ProductDAO接口的对象
在简单工厂类ProductDAOFactory的代码实现中,我们把实例化简单工厂对象和ProductDAO对象的过程放在静态语句块中,即在ProductDAOFactory类被加载的时候就完成了对象的创建,从而使得创建对象的代码不用每次调用工厂类的时候都执行一遍。
3 结束语
本文以网上购物系统中的产品管理模块的设计与实现为例,讨论了设计模式在软件开发过程中的应用,展示了设计模式在面向对象的程序设计中的重要作用。针对产品管理模块中提供对各种数据库系统的支持这一具体问题,提出了简单工厂模式这一设计思路并给出了具体解决方案。通过工厂模式的应用,使系统的结构更加合理,开发效率显著提高,尤其是系统的可扩展性、可维护性大大的增强。如今,各种设计模式已经在软件产品的设计与开发过程中得到越来越广泛的应用。
参考文献:
[1]徐宏喆,侯迪.使用软件设计模式教程[M].北京:清华大学出版社,2009:103-112.
[2]耿祥义,郝丽.JAVA设计模式在视频监控系统软件设计中的应用[J].电脑知识与技术,2010,6(30):8490-8492.
[3]秦澎涛,王苏文.简单工厂模式在数据访问层中的应用[J].计算机应用技术,2009,30(7):1799-1801.
作者简介:冯贺(1982.08-),男,河南省安阳县人,教师,助教,硕士研究生,研究方向:信息技术、数据挖掘。