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");

  • 相关阅读:
    取消select默认样式
    浏览器私有前缀
    兼容ie的background-size: cover;
    关于字体
    lorem 快速生成x个单词
    bash常见命令
    rgba透明的兼容处理
    JDK源码分析(10) CopyOnWriteArrayList
    JDK源码分析(9) LinkedHashMap
    JDK源码分析(8) StringBuffer & StringBuilder
  • 原文地址:https://www.cnblogs.com/pfcan66/p/2345071.html
Copyright © 2011-2022 走看看