• 读取配置文件动态创建对象[C++](4)

    2006-02-02

    Tag:OO

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://jnn.blogbus.com/logs/1879321.html

    在全局函数中完成LoggerAppender的初始化工作

    initializeFactoryRegistry();

     

    void initializeFactoryRegistry() {

            AppenderFactoryRegistry& reg = getAppenderFactoryRegistry();

            auto_ptr<AppenderFactory> ptr1(new ConsoleAppenderFactory());

            reg.put(ptr1);

            auto_ptr<AppenderFactory> ptr2(new NullAppenderFactory());

            reg.put(ptr2);

            auto_ptr<AppenderFactory> ptr3(new FileAppenderFactory());

            reg.put(ptr3);

            auto_ptr<AppenderFactory> ptr4(new RollingFileAppenderFactory());

            reg.put(ptr4);

            auto_ptr<AppenderFactory> ptr5(new DailyRollingFileAppenderFactory());

            reg.put(ptr5);

            auto_ptr<AppenderFactory> ptr6(new SocketAppenderFactory());

            reg.put(ptr6);

    #if defined(_WIN32)

            auto_ptr<AppenderFactory> ptr7(new NTEventLogAppenderFactory());

            reg.put(ptr7);

    #elif defined(HAVE_SYSLOG_H)

            auto_ptr<AppenderFactory> ptr8(new SysLogAppenderFactory());

            reg.put(ptr8);

    #endif

            LayoutFactoryRegistry& reg2 = getLayoutFactoryRegistry();

            auto_ptr<LayoutFactory> ptr21(new SimpleLayoutFactory());

            reg2.put(ptr21);

            auto_ptr<LayoutFactory> ptr22(new TTCCLayoutFactory());

            reg2.put(ptr22);

            auto_ptr<LayoutFactory> ptr23(new PatternLayoutFactory());

            reg2.put(ptr23);

     

            FilterFactoryRegistry& reg3 = getFilterFactoryRegistry();

            auto_ptr<FilterFactory> ptr31(new DenyAllFilterFactory());

            reg3.put(ptr31);

            auto_ptr<FilterFactory> ptr32(new LogLevelMatchFilterFactory());

            reg3.put(ptr32);

            auto_ptr<FilterFactory> ptr33(new LogLevelRangeFilterFactory());

            reg3.put(ptr33);

            auto_ptr<FilterFactory> ptr34(new StringMatchFilterFactory());

            reg3.put(ptr34);

    }

     

    通过这种方式来实现 

                  AppenderFactoryRegistry

                       LayoutFactoryRegistry

                       FilterFactoryRegistry

                       的初始化工作 如果要加入新的类型的数据的支持,需要将这部分的内容也要实现

           

             如何利用Registry中的内容来实现对象数据的创建?

    注意

    得到的指针内容都是Factory中定义的内容,

    通过调用Factory方法来获取具体的能够使用的对象的实例

            


    收藏到:Del.icio.us