zoukankan      html  css  js  c++  java
  • 反射+抽象工厂模式

    这里通过一个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


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

  • 相关阅读:
    SharedPreferences
    Handler
    Gallery 和ImageSwitcher
    poj 1077 Eight (BFS)
    HDU 1208 Pascal's Travels( 记忆化搜索)
    HDU 1619 Unidirectional TSP (dp,dfs)
    HDU 3683 Gomoku (枚举+BFS)
    HDU 3647 Tetris (暴力DFS)
    poj 1020 Anniversary Cake (DFS)
    poj 1375 Intervals(解析几何 过圆外一点求与圆的切线)
  • 原文地址:https://www.cnblogs.com/KingUp/p/4348791.html
Copyright © 2011-2022 走看看