zoukankan      html  css  js  c++  java
  • 设计模式之抽象工厂模式

    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>

  • 相关阅读:
    MFC中注释含义
    数字时钟
    布线问题分支限界法
    精度计算大数阶乘ACM常用算法
    C++库大全
    简单文本编辑器制作windows程序设计雏形
    使用计时器方法2
    MFC常用基本数据类型
    Xcode 代码格式化/自动排版
    android的color值
  • 原文地址:https://www.cnblogs.com/cqxhl/p/6097177.html
Copyright © 2011-2022 走看看