zoukankan      html  css  js  c++  java
  • 动态【配置文件】之实现(一)

      上次,我们分析了“动态”配置文件的基本需求,也基本定下了设计思路。我们今天就来实现第一要素:读写配置文件

      按照我们上次的分析要求,我设计了以下几个类

    ConfigManager,【配置文件管理类】

    Config,【单个配置文件】

    ConfigSection,【配置文件中的单个程序节】

    三个类依次包含,为了方便程序调用,为此,设计了三个接口,分别由三个类来实现。这样一来,外部调用的程序,只需要知道接口,而不需要引用这个类;

    部分定义代码

    IConfigManager定义

    IConfigManager
     1     /// <summary>
     2     /// 配置文件管理接口
     3     /// </summary>
     4     public interface IConfigManager
     5     {
     6         /// <summary>
     7         /// 增加配置文件
     8         /// </summary>
     9         /// <param name="pCfg">配置文件</param>
    10         void AddConfig(IConfig pCfg);
    11         /// <summary>
    12         /// 删除配置文件
    13         /// </summary>
    14         /// <param name="pCfg">配置文件</param>
    15         void DeleteConfig(IConfig pCfg);
    16         /// <summary>
    17         /// 定位配置文件
    18         /// </summary>
    19         /// <param name="pName"></param>
    20         /// <returns></returns>
    21         IConfig FindConfig(string pName);
    22         /// <summary>
    23         /// 配置文件是否存在
    24         /// </summary>
    25         /// <param name="pName"></param>
    26         /// <returns></returns>
    27         bool HasExist(string pName);
    28         /// <summary>
    29         /// 默认配置文件后缀
    30         /// </summary>
    31         string DefaultEx
    32         {
    33             get;
    34             set;
    35         }
    36         /// <summary>
    37         /// 默认配置文件存放位置
    38         /// </summary>
    39         string DefaultFolder
    40         {
    41             get;
    42             set;
    43         }
    44         /// <summary>
    45         /// 加载目录下的所有配置文件
    46         /// </summary>
    47         void Load();
    48         /// <summary>
    49         /// 当前的配置文件
    50         /// </summary>
    51         IConfig CurrentConfig
    52         {
    53             get;
    54             set;
    55         }
    56     }

    IConfig定义

    代码
     1     /// <summary>
     2     /// 单个配置文件
     3     /// </summary>
     4     public interface IConfig
     5     {
     6         /// <summary>
     7         /// 配置文件名称
     8         /// </summary>
     9         string Name
    10         {
    11             get;
    12             set;
    13         }
    14         /// <summary>
    15         /// 增加程序节
    16         /// </summary>
    17         /// <param name="pCfgSec"></param>
    18         void AddSection(IConfigSection pCfgSec);
    19         /// <summary>
    20         /// 删除程序节
    21         /// </summary>
    22         /// <param name="pCfgSec"></param>
    23         void DeleteSection(IConfigSection pCfgSec);
    24         /// <summary>
    25         /// 定位程序节
    26         /// </summary>
    27         /// <param name="pName"></param>
    28         /// <returns></returns>
    29         IConfigSection FindSection(string pName);
    30         /// <summary>
    31         /// 查询程序节是否存在
    32         /// </summary>
    33         /// <param name="pName"></param>
    34         /// <returns></returns>
    35         bool HasExist(string pName);
    36         /// <summary>
    37         /// 直接读取某个程序节下的设置
    38         /// </summary>
    39         /// <param name="pSectionName"></param>
    40         /// <param name="pKeyName"></param>
    41         /// <param name="pDefaultValue"></param>
    42         /// <returns></returns>
    43         object ReadKeyValue(string pSectionName, string pKeyName, object pDefaultValue);
    44         /// <summary>
    45         /// 写入某个程序节下,如果此程序节不存在,将创建
    46         /// </summary>
    47         /// <param name="pSectionName"></param>
    48         /// <param name="pKeyName"></param>
    49         /// <param name="pValue"></param>
    50         void WriteKeyValue(string pSectionName, string pKeyName, object pValue);
    51         /// <summary>
    52         /// 加载文件,读取全部配置
    53         /// </summary>
    54         /// <param name="pFileName"></param>
    55         void LoadfromFile(string pFileName);
    56         /// <summary>
    57         /// 设置保存到文件
    58         /// </summary>
    59         void SaveToFile();
    60         /// <summary>
    61         /// 自动保存
    62         /// </summary>
    63         bool AutoSave
    64         {
    65             get;
    66             set;
    67         }
    68         /// <summary>
    69         /// 是否开启文件监测
    70         /// </summary>
    71         bool Watched
    72         {
    73             get;
    74             set;
    75         }
    76         /// <summary>
    77         /// 此配置文件的文件路径
    78         /// </summary>
    79         string FileName
    80         {
    81             get;
    82             set;
    83         }
    84     }

    IConfigSection定义

    代码
        /// <summary>
        
    /// 配置分类
        
    /// </summary>
        public interface IConfigSection
        {
            
    string SectionName
            {
                
    get;
                
    set;
            }
            
    void Add(string pKeyName, object pKeyValue);
            
    void Delete(string pKeyName);
            
    object ReadKeyValue(string pKeyName, object pDefaultValue);
            
    void WriteKeyValue(string pKeyName, object pValue);
            
    void SaveToFile();
        }

    由于本次采用ini文件作为配置文件的载体,所以,在读写上就省略了很多方法。甚至在IConfig接口上提供了读写方法,但为了XML文件之类的读写,还是提供了方法定义。

    (未完待续...)

  • 相关阅读:
    Andrew Ng机器学习week4(Neural Networks: Representation)编程习题
    linux系统下crontab 配置启动定时任务
    在python中配置tornado服务
    在python中Flask配置服务
    ltp的使用
    查看文件内容- 删除某个运行程序的所有进程-nohup后台执行程序
    机器学习和深度学习资料整理
    配置linux服务器和pycharm的连接
    计算 24 点是一种扑克牌益智游戏,随机抽出 4 张扑克牌,通过加 (+) ,减 (-) ,乘 ( * ), 除 (/) 四种运算法则计算得到整数 24 ,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写 joker 表示小王,大写 JOKER 表示大王:
    机器人的运动范围 剑指offer66题
  • 原文地址:https://www.cnblogs.com/feedback/p/1736931.html
Copyright © 2011-2022 走看看