C#设计模式之工厂方法模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

//工厂方法模式实例
namespace Factory_event
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("工厂方法模式实例:");
            LoggerFactory factory;
            Logger logger;
            factory = new FileLoggerFactory();//可引入配置文件实现
            logger = factory.CreateLogger();
            logger.WriteLog();//结果:文件日志记录
            //
            factory = new DatabaseLoggerFactory();
            logger = factory.CreateLogger();
            logger.WriteLog();//结果:数据库日志记录
            Console.Read();
            /*总结:
             * 1.如果需要更换日志记录器,则只需要修改客户端代码中具体工厂类的类名即可.
             * 2.如果需要添加并使用新的日志记录器,只需要对应增加一个新的具体工厂类,
             * --再在客户端代码中修改具体工厂类类名,原有类库代码无须做任何修改.
             * 可配置:可通过引入配置文件并使用反射机制,可实现在不修改客户端代码的基础上更换具体工厂类
             */
        }
    }

    /// <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;      
        }
    }


}
原文地址:https://www.cnblogs.com/lbonet/p/7145251.html