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;      
            }
        }
    
    
    }
  • 相关阅读:
    Vue基础系列(五)——Vue中的指令(中)
    Vue基础系列(四)——Vue中的指令(上)
    Vue基础系列(三)——Vue模板中的数据绑定语法
    Vue基础系列(二)——Vue中的methods属性
    Vue基础系列(一)——Vue入坑第一篇
    MongoDB学习笔记(一)
    设计模式————单例模式和有上限的多例模式
    设计模式————6大设计原则
    数据结构和算法————二分查找
    OpenJDK1.8.0 源码解析————HashMap的实现(二)
  • 原文地址:https://www.cnblogs.com/lbonet/p/7145251.html
Copyright © 2011-2022 走看看