zoukankan      html  css  js  c++  java
  • 反射+抽象工厂的数据访问

    如有一接口IUser,继承该接口的两个类分别为SqlserverUser和AccessUser(它们之间的关系是抽象工厂模式)

    而到底引用哪个类是通过db变量来决定,if(db=Sqlserver)则实例SqlserverUser反之易然
            
    简单模式

    View Code
     1 class Data
    2 {
    3 private static readonly string db = "Sqlserver";//或Access
    4 public static IUser CreateUser()
    5 {
    6 IUser result = null;
    7 switch (db)
    8 {
    9 case "Sqlserver":
    10 result = new SqlserverUser();
    11 break;
    12 case "Access":
    13 result = new AccessUser();
    14 break;
    15 }
    16 return result;
    17 }
    18 }

    if再要加一个OracleUser则得加一分支,需修改该类,违反了开放-封闭原则
    反射模式

    必须引用using System.Reflection;

    View Code
     1 class Data
    2 {
    3 private static readonly string db = "Sqlserver";//或Access
    4 private static readonly string AssemblyName = "抽象工厂模式";//当前“程序集”名称
    5 public static IUser CreateUser()
    6 {
    7 string className = AssemblyName + "." + db + "User";//要实例化的“类名”
    8 return (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
    9 }
    10 }

    第二个抽象工厂模式是指当前“命名空间”名称

    IUser result = (IUser)Assembly.Load("抽象工厂模式").CreateInstance("抽象工厂模式.SqlserverUser");

  • 相关阅读:
    迭代器实现斐波那契数列
    type 创建类,赋予类静态方法等
    使用types库修改函数
    使用property取代getter和setter方法
    pdb 进行调试
    nonlocal 访问变量
    timeit_list操作测试
    metaclass 拦截类的创建,并返回
    isinstance方法判断可迭代和迭代器
    苹果cms10 官方QQ微信防红防封代码
  • 原文地址:https://www.cnblogs.com/pfcan66/p/2345071.html
Copyright © 2011-2022 走看看