方法工厂模式

简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,如何实现增加新产品而不影响已有代码?工厂方法模式应运而生,本文将介绍第二种工厂模式——工厂方法模式。

软件公司欲开发一个系统运行日志记录器(Logger),该记录器可以通过多种途径保存系统的运行日志,如通过文件记录或数据库记录,用户可以通过修改配置文件灵活地更换日志记录方式。在设计各类日志记录器时,公司的开发人员发现需要对日志记录器进行一些初始化工作,初始化参数的设置过程较为复杂,而且某些参数的设置有严格的先后次序,否则可能会发生记录失败。如何封装记录器的初始化过程并保证多种记录器切换的灵活性是开发人员面临的一个难题。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//
// 
//  工厂方法模式演示程序
//  日志记录器
//
//
namespace LoggerProject
{
    /// <summary>
    /// 日志记录器接口,抽象产品
    /// </summary>
    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>
    interface LoggerFactory
    {
        Logger createLogger();
    }
/*    abstract class LoggerFactory
    {
        public void writeLog()
        {
            Logger logger = this.createLogger();
            logger.writeLog();
        }

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

    class Program
    {
        static void Main(string[] args)
        {
            LoggerFactory factory;
            Logger logger;
            factory = new FileLoggerFactory();
            logger = factory.createLogger();
            logger.writeLog();
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值