码迷,mamicode.com
首页 > 其他好文 > 详细

反射+抽象工厂模式

时间:2015-03-18 23:01:53      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

这里通过一个DEMO介绍反射配合抽象工厂模式的运用。大概业务背景就是在实际业务过程中,可能要替换数据库,具体代码如下:

1、User实体类

技术分享
class User
    {
        private int id;
        private string name;
        public int Id {
            get { return id; }
            set { id = value; }
        }
        public string Name {
            get { return name; }
            set { name = value; }
        }
    }
View Code

2、操作User实体的接口类

技术分享
interface IUserDao
    {
         void Insert(User user);
         User GetUser(int id);
    }
View Code

3、实际数据库操作类

技术分享
 class SqlServerImpl:IUserDao 
    {

        public void Insert(User user)
        {
            Console.WriteLine("向SqlServer插入用户!");
        }

        public User GetUser(int id)
        {
            Console.WriteLine("向SqlServer获取用户");
            return null;
        }
    }
View Code
技术分享
class AccessImpl:IUserDao 
    {

        public void Insert(User user)
        {
            Console.WriteLine("向Access插入用户!");
        }

        public User GetUser(int id)
        {
            Console.WriteLine("向Access获取用户");
            return null;
        }
    }
View Code

4、数据库中间件

技术分享
class DataAccess
    {
        private static readonly string DB = ConfigurationSettings.AppSettings["DB"];
        private static readonly string AssemblyName = "反射抽象工厂";
        public static IUserDao CreateUser()
        {
            string className = AssemblyName + "." + DB + "Impl";
            return (IUserDao)Assembly.Load(AssemblyName).CreateInstance(className);
        }

    }
View Code

5、配置文件

技术分享
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
    </startup>
  <appSettings>
    <add  key ="DB" value ="Access"/>
  </appSettings>
</configuration>
View Code

6、客户端调用

技术分享
IUserDao userDao = DataAccess.CreateUser();
            userDao.GetUser(1);
            userDao.Insert(new User());
View Code


使用此设计模式,可以将数据库直接通过配置文档修改替换,实现对修改关闭,对扩展开放

 

反射+抽象工厂模式

标签:

原文地址:http://www.cnblogs.com/KingUp/p/4348791.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!