• 设计模式之工厂方法配置文件与反射


    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    using System.Reflection;//导入命名空间(记得在解决方案资源管理器里的“引用”中添加“System.Configuration”)
    
    //工厂方法模式实例--配置文件与反射
    namespace Factory_event
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("工厂方法模式实例--配置文件与反射:");
                LoggerFactory factory;//针对抽象工厂类编程
                Logger logger;        //针对抽象产品类编程
                //读取配置文件
                string factoryString = ConfigurationManager.AppSettings["factory"];
                //反射生成对象
                factory = (LoggerFactory)Assembly.Load("Factory_event").CreateInstance(factoryString);
                logger = factory.CreateLogger();
                logger.WriteLog();
                Console.Read();
                /*总结:
                 * (1)新增的日志记录器需要继承抽象日志器类Logger
                 * (2)增加一个新的具体日志记录器工厂,继承抽象日志记录器工厂类LoggerFactory
                 * --并实现其中工厂方法CreateLogger(),返回具体的日志记录器对象
                 * (3)修改配置文件App.config,以新增具体的日志记录器工厂类的类名字符串替换原有的工厂类名字符串
                 * (4)编译运行--使用新的日志记录器方式,而原有的类库代码无须做任何修改,完全符合开闭原则
                 * 待续
                 */
            }
        }
    
        /// <summary>
        /// 日志记录接口,充当抽象产品角色
        /// </summary>
        internal interface Logger
        {
            void WriteLog();
        }
        /// <summary>
        /// 数据库日志记录器,充当具体产品角色
        /// </summary>
        class DatabaseLogger : Logger
        {
    
            public void WriteLog()
            {
                Console.WriteLine("数据库记录日志");
            }
        }
        /// <summary>
        /// 文件日志记录器,充当具体产品角色
        /// </summary>
        class FileLogger : Logger
        {
            public void WriteLog()
            {
                Console.WriteLine("文件日志记录");
            }
        }
        /// <summary>
        /// 日志记录器工厂接口
        /// </summary>
        internal interface LoggerFactory
        {
            Logger CreateLogger();//抽象工厂方法
        }
        /// <summary>
        /// 数据库日志记录器工厂类,充当具体工厂角色
        /// </summary>
        class DatabaseLoggerFactory : LoggerFactory
        {
            public Logger CreateLogger()
            {
                //连接数据库
                //创建数据库日志记录对象
                Logger logger = new DatabaseLogger();
                //初始化数据库日志记录器
                return logger;
            }
        }
        /// <summary>
        /// 文件日志记录器工厂类,充当具体工厂角色
        /// </summary>
        class FileLoggerFactory : LoggerFactory
        {
            public Logger CreateLogger()
            {
                //创建日志记录器对象
                Logger logger = new FileLogger();
                //创建文件
                //...
                return logger;
            }
        }
    
    
    }

    App.config:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="factory" value="Factory_event.FileLoggerFactory"/> 
      </appSettings>
    </configuration>
  • 相关阅读:
    codeforces 368B
    codeforces 651A
    codeforces 651B
    codeforces 732B
    codeforces 313B
    codeforces 550A
    codeforces 498B
    Linux C/C++基础——内存分区
    Linux C/C++基础——变量作用域
    Linux C/C++基础——Windows远程登录Linux
  • 原文地址:https://www.cnblogs.com/lbonet/p/7150054.html
Copyright © 2020-2023  润新知