zoukankan      html  css  js  c++  java
  • 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;      
            }
        }
    
    
    }
  • 相关阅读:
    [LeetCode] 25.Reverse Nodes in k-Group-2
    [LeetCode] 25.Reverse Nodes in k-Group[UNSOLVED]
    [Leetcode] 24. Swap Nodes in Pairs
    [ProcessTree]How to list process tree / 如何显示进程树
    [Windows事件管理器]安全审核的文档
    [vdebench]文件系统的联机测试
    [Windows]多网卡配置网卡优先级
    [Ubuntu]开机紫屏的解决方法
    [USDA]查询食物热量和微量元素
    [Python]使用timer测量代码的执行速度
  • 原文地址:https://www.cnblogs.com/lbonet/p/7145251.html
Copyright © 2011-2022 走看看