首页 > 代码库 > C#设计模式之工厂方法模式

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

 

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