• 反射+抽象工厂模式


    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
    }
    欢迎转载或分享,如果文章对你有帮助,请给予推荐,欢迎交流及关注!!!
  • 相关阅读:
    Cypher 语句实战
    springboot2.0-统一处理返回结果和异常情况
    IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?
    Dripicons – 精美的扁平风格的免费矢量图标字体
    实用手册:130+ 提高开发效率的 vim 常用命令
    RulersGuides.js – 网站中实现 Photoshop 标尺效果
    分享27款最佳的复古风格 WordPress 主题
    Web 开发人员必备的12款 Chrome 扩展程序
    酷站欣赏:20个精美的国外扁平化网页设计作品
    编码神器——Sublime Text 包管理工具及扩展大全
  • 原文地址:https://www.cnblogs.com/dong897812629/p/3008655.html
Copyright © 2020-2023  润新知