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;      
            }
        }
    
    
    }
  • 相关阅读:
    HashMap按键排序和按值排序
    LeetCode 91. Decode Ways
    LeetCode 459. Repeated Substring Pattern
    JVM
    LeetCode 385. Mini Parse
    LeetCode 319. Bulb Switcher
    LeetCode 343. Integer Break
    LeetCode 397. Integer Replacement
    LeetCode 3. Longest Substring Without Repeating Characters
    linux-网络数据包抓取-tcpdump
  • 原文地址:https://www.cnblogs.com/lbonet/p/7145251.html
Copyright © 2011-2022 走看看