工厂方法模式是一种常用的设计模式,它定义了一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。工厂方法模式使得一个类的实例化延迟到其子类。本文将通过一个简单的日志记录框架示例,展示如何使用工厂方法模式来创建对象。
在面向对象编程中,经常需要创建对象。但是,直接使用new关键字创建对象可能会导致代码的耦合度增加。为了解决这个问题,可以使用工厂方法模式。工厂方法模式允许通过一个公共接口来创建对象,而不需要知道具体的实现类。这样,就可以在不修改现有代码的情况下,增加新的实现类。
首先,需要定义一个日志记录的接口,然后实现这个接口的两个具体类。为了演示,将使用一个简单的字符串返回作为日志记录的实现。
        namespace LoggerClassLibrary
        {
            public interface ILogger
            {
                string Log();
            }
        }
    
接下来,定义两个具体的日志记录类:
        namespace LoggerClassLibrary.ConcreteLoggers
        {
            internal class SqlLogger : ILogger
            {
                public string Log()
                {
                    return "Logging to SQL";
                }
            }
        }
    
        namespace LoggerClassLibrary.ConcreteLoggers
        {
            internal class DiskLogger : ILogger
            {
                public string Log()
                {
                    return "Logging to Disk";
                }
            }
        }
    
为了使用工厂方法模式,需要定义一个创建日志记录对象的接口:
        public interface ILoggerCreator
        {
            ILogger CreateLogger();
        }
    
然后,定义两个具体的创建类:
        public class DiskLoggerCreator : ILoggerCreator
        {
            public ILogger CreateLogger()
            {
                return new DiskLogger();
            }
        }
    
        public class SqlLoggerCreator : ILoggerCreator
        {
            public ILogger CreateLogger()
            {
                return new SqlLogger();
            }
        }
    
最后,可以使用这些创建类来创建日志记录对象:
        public void Log(ILoggerCreator creator)
        {
            ILogger logger = creator.CreateLogger();
            Console.WriteLine(logger.Log());
        }
    
通过这种方式,成功地实现了工厂方法模式,并且可以轻松地添加新的日志记录实现类。