首先,设计模式的文章源自于程杰的《大话设计模式》这本书,这本书个人感觉很适合我,看着不累,能够安安心心的阅读学习。在这里十分感谢程杰的这本书,我博文中的例子会根据书上的例子来。为了不侵犯这本书的版权,我不会写上具体的代码,仅用自己写的代码截图或者思路描述,毕竟这是给我自己的记录,我写文章是为了在我看完书本后自己尝试描述出来,加深记忆和理解。

从这篇文章起,我将开始自己有章法的学习设计模式,一篇一篇的记录我的学习历程!

本篇博文中用到的设计模式是 抽象工厂模式,用我自己的话概括就是指:某一产品的不同生产形式。

这里,先贴上程序结构图:

从上图可以看出,我定义了两个实体,Department 还有 User,在这里模拟数据库里面的两张表。

现在的情况是:以前我使用Sqlserver数据库来存放数据,应客户需求,将要改成Oracle数据库。

拿User表来当例子,

这里,我定义了一个IUser接口,规定了两个方法,分别是插入一条数据的Insert方法,还有读取一条数据的GetUser方法。

如图中红框显示,我新建了两个类,用来分别执行Oracle的方法还有Sqlserver的方法。

这两个类都实现IUser接口

新建一个DataAccess工厂类,在这个类里面来 利用反射来完成类名的自动调用(不知道这个说法正不正确...)。

上图中的CreateUser方法中,用反射来设置我们预定义的数据库。这里,我将数据库的类型配置放在了web.config里面,这样就可以实现通过修改配置文件来修改使用的数据库,就像访问数据库使用配置文件存放连接字符一样。

   <appSettings >
<!-- 配置使用数据库的类型 -->
<add key="db" value="Sqlserver"/>
</appSettings>

其实,这里这样写就是实现了用变量来动态的改变方法名,这里通过db这个字符串就可以得到不同“类名”,从而代替了switch case。

到这里,这个程序基本完成,另外在添加上Department的相关类就可以了,这样就实现了切换DB了。

若是我们新增加了一个表(产品),例如Project,那么,我们仅需要新建该表的model,在不同的数据库操作类中添加上对应的操作方法(如:insert()),即可。并不会对其他的产品方法造成任何影响。

若是我们需要添加一个新的数据库,例如Access,那么,我们仅需要新建一个Access操作类,并将db的值修改成Access即可。不用修改客户端代码。

具体关于反射的用法,这里不详说。毕竟是主要撸设计模式的。

最后

我是按照程序编写的过程来写的,可能不会写得很明朗清晰,若是哪里没有写明白,请给我留言,我们来探讨探讨!

另外,谢谢程杰的《大话设计模式》这本优秀的书,对我来说,也许是代码简洁之道的启蒙了!引用该书中的一句话“无痴迷,不成功”

相关链接:

Demo下载:http://download.csdn.net/detail/a406502972/7890969

最新文章

  1. MySql unique的实现原理简析
  2. 简述 C、C++程序编译的内存分配情况【转】
  3. Brocade博科光纤交换机zone配置
  4. iOS 解析json串
  5. atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表
  6. CentOS6.5菜鸟之旅:中文编辑器忍痛放弃Sublime
  7. 2.精通前端系列技术之JavaScript模块化开发 seajs(一)
  8. 洗清UI自动化鸡肋说的不白之冤
  9. objectiv-c所有对象之间的交互是如何实现的?
  10. DC DC降壓變換器ic 工作原理
  11. PROCEDURE_监测系统_告警信息存储过程—产生告警信息插入告警表
  12. android动画介绍之 自定义Animation动画实现qq抖一抖效果
  13. centos7系统优化-转载
  14. sqlserver 3145
  15. Linux VNC安装
  16. 网络编程--使用UDP发送接收数据
  17. SQL Server 之 子查询与嵌套查询
  18. 一步一步来熟悉Akka.Net(一)
  19. 输//ip提示找不到应用程序
  20. 查询hadoop参数变量

热门文章

  1. C#文本写入文件,追加写入文件
  2. Python学习笔记 之 函数
  3. JS事件-事件处理程序-笔记总结ing...
  4. MAC地址是什么
  5. 11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
  6. ANDROID_HOME on Mac OS X
  7. mui jquery 同时使用
  8. jsp页面中引用其他页面的方法
  9. @SuppressWarnings注解的用法
  10. linux零基础入门总结