zoukankan      html  css  js  c++  java
  • Rocket

     
    介绍配置类Parameters及其伴生对象的实现。
     
    参考链接:
     
     
     
    1. Parameters
     
    Parameters是View的子类。实现了View中的find方法,但又把find方法代理给抽象方法chain。所以真实的查找逻辑还是要在Parameters的子类中实现。
     
    chain方法代表的是一个链式查找逻辑,签名如下:
    其中:
    a. pname为要查找的配置项;
    b. site为当前要查找的视图;
    c. tail为下一个要查找的视图;
     
     
    2. EmptyParameters
     
     
    EmptyParameters中没有配置项,所以直接在下一个视图中查找:tail.find(pname, site)
     
    其创建使用Parameters伴生对象进行创建:
     
     
    3. PartialParameters
     
     
    PartialParameters包含一个类型为函数的成员f,其类型为:(View, View, View) => PartialFunction[Any,Any]
    a. 接收三个类型为View的参数;
    b. 返回一个类型为PartialFunction[Any,Any]的函数;
     
    PartialParameters的查找逻辑如下:
    a. 根据当前的上下文,生成一个匹配函数g;
    b. g是一个部分(partial)匹配函数,先检查这个函数是否针对查找key(pname)有匹配项。如果有,则执行匹配找到匹配项并返回;如果没有匹配项,则使用下一个视图(tail)进行查找。
     
     
    4. MapParameters
     
     
    MapParameters的查找逻辑如下:
    a. 在映射表map中查找key(pname)对应的值;
    b. 如果存在,则返回配置值;如果不存在,则使用下一个视图(tail)进行查找;
     
     
    5. ChainParameters
     
     
    ChainParameters本身不能返回配置值,只是一个从x到y的链接。先到x中查找,而后到y中查找。
     
     
    6. Config
     
     
    Config本身只是一个包装类,是Parameter p的包装,直接调用p.chain进行查找。
     
    它也包含一个传入参数f的构造方法,自动使用f构造一个Parameter包装在Config中。这样外部只需要使用Config即可,而不需要在使用Parameter伴生对象的工厂方法。
     
    如下即是使用Config的第二个(secondary)构造方法:
     
     
    7. 总结
     
    查找配置项有两种方法:
    a. 动态匹配查找,使用PartialParameters,因为他是一个私有类,所以外部只能使用Config类的第二个构造方法;
    b. 静态映射表查找,使用MapParameters,在Rocket中没有使用。
     
    ChainParameters只是用于构造链式视图结构,而不包含实际的配置项。Parameters类的++方法把两个视图组合成一个ChainParameters:
     
    Config类也继承了这个方法:
     
    所以外部只需要使用Config类即可。
     
     
  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10327355.html
Copyright © 2011-2022 走看看