• 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;      
            }
        }
    
    
    }
  • 相关阅读:
    选择 冒泡 快速 插入排序
    类方法
    Java--静态区域块
    打印字母如何显示声调
    navicat 创建的表,username字段不能接受中文名字。
    C++primer plus第六版课后编程题答案10.8(来个高手教教我)
    C++primer plus第六版课后编程题答案10.7
    C++primer plus第六版课后编程题答案10.6
    错误 1 error C2143: 语法错误 : 缺少“;”(在“using”的前面)
    C++primer plus第六版课后编程题答案10.5
  • 原文地址:https://www.cnblogs.com/lbonet/p/7145251.html
Copyright © 2020-2023  润新知