Microsoft  CSIP   WindowsMobile   MEDC   合作伙伴   体验中心 设为首页 加到收藏夹

 
登录       点击换一张     注册新用户 找回密码

.Net Framework框架源码学习-简单工厂模式
2008年07月31日09:51   编辑:阿鹏 来源: http://www.winbile.net 浏览: 363

小菜与简单工厂模式,工厂模式,包括抽象工厂模式的结缘都源至于以前支持多数据库的学习过程.
现在就来回顾下该过程,回顾下工厂系列模式.希望能带给你不一样的感觉,不一样的体会.
因为回顾写太长了,所以就没有写.Net Framework框架源码中的模式了.下篇会都补上.

小菜前段时间写了一些梦游Discuz!NT2.0的文章,现在就以它为例来说明吧.
我们的工作是支持SqlServer数据库,Access数据库,MySql数据库.
这样的话,每一种对数据库的操作都会对应三种不同的实现.

以dnt_forums(论坛版块信息表)为例. 已有数据 (这个表被小菜简化了,因为这样更能说明问题)

fid  : 版块编号name : 版块名称
1版块1
2版块2

现在要求提供操作.
1.按fid访问数据库取出name ==> string GetForumName(int fid)
等等数据库相关操作......

先来看看代码的组织吧.
netframework3_1
 
很直观.接下来就来看代码吧.
数据访问接口

Code

SqlServer数据库实现

Code

大家不要骂小菜说骗人噢,假的实现, :) 因为这里是讲设计模式,不应该把太多的实现带进来.
如果想复习下数据库的操作,可参看 <小菜梦游Discuz!NT数据层设计部份>
Access数据库实现

Code

MySql数据库实现

Code

这样的话,那么我们的客户程序便可以方便的使用了.
Default.aspx页面

Code

如果小菜想在页面Forum.aspx也使用ForumManage类,怎么办呢?
这还不简单:

Code

苍天啊,大地啊,怎么会这样啊,一模一样的代码竟然出现.(代码中有坏味道,看来我们得重构一下它才行)
怎么办呢? 把创建具体ForumManage的逻辑独立出来,放入某个类中,就设为ForumFactory吧
这样我们就引入ForumFactory类

Code

那么,我们在Default.aspx和Forum.aspx等地方使用ForumManage将方便许多,不信就接着往下看.

Default.aspx页面
Code
Forum.aspx页面