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

    1.抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

    2.反射:

    例子:

    webconfig部分:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <appSettings>
            <add key="DB" value="Sqlserver"/>
        </appSettings>
    </configuration>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    /**/
    using System.Reflection;//反射
    using System.Configuration;
    
    namespace 抽象工厂模式
    {
        class Program
        {
            static void Main(string[] args)
            {
                User user = new User();
                Department department = new Department();
                IUser iu = DataAccess.CreatUser();
                iu.Insert(user);
                iu.GetUser(1);
    
                IDepartment id = DataAccess.CreatDepartment();
                id.Insert(department);
                id.Getdepartment(1);
                Console.Read();
            }
        }
        #region 公共属性
        class User
        {
            private int _id;
            public int ID
            {
                get { return _id; }
                set { _id = value; }
            }
    
            private string _name;
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }
        }
    
        class Department
        {
            private int _id;
            public int ID
            {
                get { return _id; }
                set { _id = value; }
            }
    
            private string _deptName;
            public string DeptName
            {
                get { return _deptName; }
                set { _deptName = value; }
            }
        }
        #endregion
    
        #region 用户接口
        /// <summary>
        /// 用户接口
        /// </summary>
        interface IUser
        {
            void Insert(User user);
            User GetUser(int id);
        }
        #endregion
    
        #region 部门接口
        /// <summary>
        /// 部门接口
        /// </summary>
        interface IDepartment
        {
            void Insert(Department department);
            Department Getdepartment(int id);
        }
        #endregion
    
        #region 用户接口的实现
        class SqlserverUser : IUser
        {
            public void Insert(User user)
            {
                Console.WriteLine("在SqlserverUser中给User表增加一条记录");
            }
            public User GetUser(int id)
            {
                Console.WriteLine("在SqlserverUser中根据ID得到User的一条记录");
                return null;
            }
        }
        class AccessUser : IUser
        {
            public void Insert(User user)
            {
                Console.WriteLine("在AccessUser中给User表增加一条记录");
            }
            public User GetUser(int id)
            {
                Console.WriteLine("在AccessUser中根据ID得到User的一条记录");
                return null;
            }
        }
        #endregion
    
        #region 部门接口的实现
        class SqlserverDepartment : IDepartment
        {
            public void Insert(Department department)
            {
                Console.WriteLine("在SqlserverDepartment中给Department增加一条记录");
            }
            public Department Getdepartment(int id)
            {
                Console.WriteLine("在SqlserverDepartment中根据ID得到Department的一条记录");
                return null;
            }
        }
        class AccessDepartment : IDepartment
        {
            public void Insert(Department department)
            {
                Console.WriteLine("在AccessDepartment中给Department增加一条记录");
            }
            public Department Getdepartment(int id)
            {
                Console.WriteLine("在AccessDepartment中根据ID得到Department的一条记录");
                return null;
            }
        }
        #endregion
    
        #region 反射技术
        class DataAccess
        {
            private static readonly string AssemblyName="抽象工厂模式";//程序集名称
            private static readonly string db=ConfigurationManager.AppSettings["DB"];
            public static IUser CreatUser()
            {
                string className = AssemblyName + "." + db + "User";//命名空间.类的名称
    
                return (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
            }
            public static IDepartment CreatDepartment()
            {
                string className = AssemblyName + "." + db + "Department";
                return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className);
            }
        }
          #endregion
    }
    欢迎转载或分享,如果文章对你有帮助,请给予推荐,欢迎交流及关注!!!
  • 相关阅读:
    golang-switch结构辨析有话
    不用中间变量交换变量值-golang版
    vue element ui表单验证不通过,滚动到页面上第一个验证失败的输入框位置
    表单校验中使用v-if和v-else来判断是福哦要校验时的注意项
    如何修改本地项目关联的远程仓库地址
    vue-cli3如何访问public文件夹下的静态资源
    Git 命令行的各种退出方式
    elementui表格如何在表头每个列标题后面插入图片用于插入tooltip
    js 把一个二叉树类型的对象转化为普通对象
    element-ui树结构设置默认选中节点时改变传入的数组树结构没有变化
  • 原文地址:https://www.cnblogs.com/dong897812629/p/3008655.html
Copyright © 2011-2022 走看看