圓梦

激情燃燒的歲月
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

抽象工厂

Posted on 2007-04-24 01:53  szw104  阅读(181)  评论(0)    收藏  举报
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4
 5namespace DataAccessFactory
 6{
 7    public class MsSqlDataAccessFactory : IDataAccessFactory
 8    {
 9
10        IDataAccessFactory 成员
19    }

20}

21
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4
 5namespace DataAccessFactory
 6{
 7    public class OleDBDataAccessFactory : IDataAccessFactory
 8    {
 9
10        IDataAccessFactory 成员
19    }

20}

21
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.Configuration; 
 5namespace DataAccessFactory
 6{
 7    public class Config
 8    {
 9        public static IDataAccess GetDataAccess()
10        {
11            switch (ConfigurationSettings.AppSettings["dataprovider"].ToLower())
12            {
13                case "mssql":
14                    return new MsSqlDataAccessFactory().GetDataAccessInstance();
15                case "oledb":
16                    return new OleDBDataAccessFactory().GetDataAccessInstance ();
17                default :
18                    return new OleDBDataAccessFactory().GetDataAccessInstance() ;
19            }

20        }

21
22    }

23}

24
 
IDataAccessFactory :用来定义取得数据访问方法
MsSqlDataAccessFactory:Sqlserver工厂,创建Sqlserver访问类
同理OracleDataAccessFactory
IDataAccess:定义了常用数据库访问方法
MsSqlServer:实现sqlServer数据库访问方法
同理Oracle
Configuration:根据配置文件.判断当前系统应该用哪个数据库访问模式.
应用的场景:
创建出不同产品等级结构的同一产品族的所有对象.
有一个很好的地方,就是降低了client程序和实际调用的对象之间的耦合性降到了最低,程序员根本就不需要去关心所调用的对象的生成规则和实现.当出现调用的对象需要修改的时候,我们也只需要修改一处就可以了.自己写了个代码,数据库访问的,支持不同类型的数据库


 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.Data;
 5namespace DataAccessFactory
 6{
 7    public interface IDataAccess
 8    {
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;    

namespace DataAccessFactory
{
    
public class OleDB:IDataAccess 
    
{
        
public void ExecuteNoQuery(IDbCommand  OleCmd)
        
{
            
throw new System.NotImplementedException();
            
        }

    }

}


 9        void ExecuteNoQuery(IDbCommand cmd);
10    }

11}