工厂方法模式

上次写到简单工厂模式。如那里说的,简单工厂模式在新加入一个新产品时候,必须修改工厂类中的代码。工厂方法模式就可以很好的克服简单工厂模式中存在的问题。

工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂

模式(Factory Pattern)。

工厂方法模式可以克服这个问题,废话不多,上代码~~~我很懒,没画UML图,呵呵,凑合着看吧。。。

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

namespace LoggerFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            LoggerFactory lf;
            Logger logger;

            lf = new FileLoggerFactory();//选择用哪个类去实例化,可以在配置文件中设置。
            logger = lf.createLogger();
            logger.writeLog();

            Console.WriteLine("------------------------------");

            lf = new DataBaseLoggerFactory();//选择用哪个类去实例化,可以在配置文件中设置。
            logger = lf.createLogger();
            logger.writeLog();

            Console.ReadKey();
        }
    }

    /// <summary>
    /// Logger记录的接口
    /// </summary>
    interface Logger
    {
         void writeLog();
    }

    /// <summary>
    /// 文件记录Logger
    /// </summary>
    class FileLogger : Logger
    {
        public void writeLog()
        {
            Console.WriteLine("文件日志记录。");
        }
    }

    /// <summary>
    /// DB记录Logger
    /// </summary>
    class DataBaseLogger : Logger
    {
        public void writeLog()
        {
            Console.WriteLine("DB日志记录。");
        }
    }

    /// <summary>
    /// 抽象工厂类
    /// </summary>
    interface LoggerFactory
    {
         Logger createLogger();
    }

    /// <summary>
    /// 具体的文件Logger工厂类
    /// </summary>
    class FileLoggerFactory : LoggerFactory
    {
        public Logger createLogger()
        {
            return new FileLogger();
        }
    }

    /// <summary>
    /// 具体的DBLogger工厂类
    /// </summary>
    class DataBaseLoggerFactory : LoggerFactory
    {
        public Logger createLogger()
        {
            return new DataBaseLogger();
        }
    }
}

 

 

posted @ 2013-04-06 12:31  冲锋撞大树  阅读(128)  评论(0编辑  收藏  举报