Sep 10

使用工厂模式实现多数据库WinForm手机号码查询器(附源码) 不指定

Heck , 16:45 , 编程杂谈 , 评论(0) , 引用(0) , 阅读(867) , Via 本站原创 | |

关于工厂模式

先讲一下简单工厂模式、工厂方法模式、抽象工厂模式的东西:

        
  • 简单工厂模式(Simple  Factory  Pattern):工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,也就是说产品的创建逻辑集中于一个工厂类,客户端只需要传递不同的参数给工厂,这时情况是:一个工厂创建一个产品,所有的具体工厂继承自一个抽象工厂;对于客户端来说,不存在与具体产品的依赖;
  •     
  • 工厂方法模式(Factory  Method  Pattern):提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现;
  •     
  • 抽象工厂模式(Abstract  Factory  Pattern):提供一个创建一系统或相互依赖对象的接口,不需要指定具体类。抽象工厂正如其名字所说,它抽象的是工厂接口,因此它面向的是多个平等等级结构,其建立对象的原则是以功能相似的对象为单位划分需要建立的对象。

简单工厂并不属于23种基本设计模式中,它是抽象工厂模式的一个特例;抽象工厂与工厂方法区别在于它们抽象的对象不同:工厂方法针对产品进行抽象,而抽象工厂抽象针对工厂。因此可以认为工厂方法是抽象工厂的一种极端情况,工厂方法模式用来创建一个产品的等级结构,它一般只有一个方法,创建一种产品;而抽象工厂是用来创建多个产品的等级结构,一般有多个方法,创建一系列产品。

手机号码查询设计

此程序主要功能就是根据手机号码段查询相应的号码归属地。数据来自网络,数据表结构如下

数据记录超过17万条

这里我使用了Sqlite数据库,将此数据库文件转换为Sqlite数据库文件。

主程序界面设计如下:

业务逻辑分析

主程序调用业务逻辑层BLL,BLL使用抽象工厂DALFactory方法,DALFactory创建DAO实例对象,接口层IDAL定义数据操作接口方法,由数据访问层通过各自的公用数据操作类库进行读写数据库,实现对实体类Model的访问。

解决方案文件列表如图

其中DBUtility为公共数据访问类库。三个数据访问层SQLServerDAL、SqliteDAL和OleDAL分别对应Sql  Server、Sqlite、Access数据库。这里我正在使用的是SqliteDAL。

(由于Wordpress数据库设计限制,此处略去详细实现部分,请下载源码自行研究)

以其中的查询结果的GetListByNum方法的UML类图如下

运行结果

主程序运行效果如下图

查看详细信息

总结

此类基于多数据库操作的应用程序是很常见的,通过使用工厂方法模式进行架构,以业务逻辑分层、抽象实现数据访问的思想进行开发,显然在程序的可扩展性、层次性具有较大的优势。

另一点值得说的是,Sqlite数据库的确在一些应用场合中具有较大的优势,关于Sqlite数据库的介绍请参见此文http://zh.wikipedia.org/wiki/SQLite

编译后程序下载(只含Sqlite数据库):http://files.cnblogs.com/walkingp/CuteMobileSearch_bin.zip

源码下载地址(含SqlServer及Sqlite数据库):http://files.cnblogs.com/walkingp/CuteMobileSearch_src.zip

单独Access数据库下载:http://files.cnblogs.com/walkingp/CuteMobileSearch_AccessDB.zip



来源:Heck's Blog
地址:http://www.hecks.tk/post/148/
转载时须以链接形式注明作者和原始出处及本声明,否则将追究法律责任,谢谢配合!