设计模式之抽象工厂模式

1、类图

2、建项目就不一一说了,请见设计模式之简单工厂

……………………………………

3、 新建Logger接口:日志记录器接口,充当抽象产品角色。

namespace FactoryMethodSample

{

    interface Logger

    {

        void WriteLog();

    }

}

4、新建DatabaseLogger类:数据库日志记录器,充当具体产品角色。

using System;

namespace FactoryMethodSample

{

    class DatabaseLogger : Logger 

    {

    public void WriteLog()

        {

    Console.WriteLine("数据库日志记录。");

    }

    }

}

5、 新建FileLogger类:文件日志金路器,充当具体产品角色。

using System;

namespace FactoryMethodSample

{

    class FileLogger : Logger 

    {

        public void WriteLog()

        {

    Console.WriteLine("文件日志记录。");

    }

    }

}

6、 新建LoggerFactory接口;日志记录器工厂接口,充当抽象工厂角色。

namespace FactoryMethodSample

{

    interface LoggerFactory

    {

        Logger CreateLogger();

    }

}

7、新建DatabaseLoggerFactory类:数据库日志记录器工厂类,充当具体工厂角色。

namespace FactoryMethodSample

{

    class DatabaseLoggerFactory : LoggerFactory

    {

    public Logger CreateLogger()

        {

//连接数据库,代码省略

//创建数据库日志记录器对象

Logger logger = new DatabaseLogger();

//初始化数据库日志记录器,代码省略

return logger;

    }

    }

}

8、 新建FileLoggerFactory类:文件日志记录器工厂类,充当具体工厂角色。

namespace FactoryMethodSample

{

    class FileLoggerFactory : LoggerFactory

    {

    public Logger CreateLogger()

        {

            //创建文件日志记录器对象

Logger logger = new FileLogger();

//创建文件,代码省略

return logger;

    }

    }

}

9、客服端

using System;

using System.Configuration;

using System.Reflection; 

namespace FactoryMethodSample

{

    class Program

    {

        static void Main(string[] args)

        {

            /*

            LoggerFactory factory;

            Logger logger;

            factory = new FileLoggerFactory(); //可引入配置文件实现

            logger = factory.CreateLogger();

            logger.WriteLog();

            */

            LoggerFactory factory;

            Logger logger;

            //读取配置文件

            string factoryString = ConfigurationManager.AppSettings["factory"];

            //反射生成对象

            factory = (LoggerFactory)Assembly.Load("FactoryMethodSample").CreateInstance(factoryString);

            logger = factory.CreateLogger();

            logger.WriteLog();

            Console.Read();

        }

    }

}

10、 配置文件:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <appSettings>

    <add key="factory" value="FactoryMethodSample.FileLoggerFactory"/>

  </appSettings>

</configuration>

原文地址:https://www.cnblogs.com/cqxhl/p/6097177.html