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

本文介绍工厂方法模式结合配置文件的应用案例,通过.NET平台演示如何利用反射动态创建日志记录器实例。包括抽象产品(日志记录接口)、具体产品(数据库日志记录器和文件日志记录器)、抽象工厂(日志记录器工厂接口)及具体工厂(数据库和文件日志记录器工厂)。通过配置文件灵活切换日志记录方式。
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>

 

转载于:https://www.cnblogs.com/lbonet/p/7150054.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值