设计模式综合实战项目x-gen 系列五

获取XML配置数据

1 详细功能
1.1 详细功能

为了实现theme的即配即用,规定theme的配置使用xml文件,框架的配置和模块的配置的provider都可以由用户指定,可以在运行时传入框架配置的provider,然后在 框架配置里面指定了模块配置的provider。

因此本章讲述获取默认的xml方式配置的数据。
1.2 功能边界

只是负责配置文件为xml时候的读取、解析并获取xml中的配置数据。其实就是实现前面桥接模式的抽象部分的接口。

2 内部实现

2.1 加入解释器模式

2.1.1面临的问题
自己解析xml,本来也没有什么特别困难的,但是问题就在于,如果xml文件的格式发生了变化,那么读取配置文件的程序就需要做出相应的变更,严重的时候,几乎相当于完全重写程序。

那么怎么解决当xml的结构发生改变过后,能够很方便的获取相应元素、或者是属性的值,而不用再去修改解析xml的程序呢?

2.1.2用解释器模式来解决

1)模式定义:
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

2)模式本质:
解释器模式的本质:分离实现,解释执行。

3)基础知识:
(1)解释器模式使用解释器对象来表示和处理相应的语法规则,一般一个解释器处理一条语法规则。
(2)解释器模式没有定义谁来构建抽象语法树,把这个工作交给了客户端处理
(3)使用解释器模式的时候,应该先定义好相应的语法规则,并根据规则制定解释器的语法树;然后客户端在调用解释器进行解释操作的时候,需要自行构建符合语法规则要求的语法树;而解释器模式只是负责解释并执行。
(4)从实质上看,解释器模式的思路仍然是分离、封装、简化,跟很多模式是一样的。

4)常见应用场景:

语法较为简单的自定义表达式解析,比如自定义xml文档的解析,文档结构不要太复杂,那不适合使用解释器模式。

解释器模式的基本实现,沿用了《研磨设计模式》一书的解释器模式一章中最后实现的通用解析程序,由于篇幅关系,这里就不会那么详细的讲述实现的细节,这里更关心实现的思路,比较高层一点。因此更多的细节请查看源代码或是《研磨设计模式》一书的解释器模式一章的内容。

很明显,使用解释器模式来解决这个问题是一个很好的思路。

设计一个简单的表达式规则,然后通过解释器模式来进行解析执行,从而获取到xml中的值。

约定简单的语法规则如下:
1:为表达式设计简单的文法
为了通用,用root表示根元素,a、b、c、d等来代表元素,一个简单的xml如下:

<?xml version="1.0" encoding="UTF-8"?> 12345 d1 d2 d3 d4 f1 f2 约定表达式的文法如下:

Ø获取单个元素的值:从根元素开始,一直到想要获取值的元素,元素中间用“/”分隔,根元素前不加“/”。比如表达式“root/a/b/c”就表示获取根元素下、a元素下、b元素下的c元素的值

Ø获取单个元素的属性的值:要获取值的属性一定是表达式的最后一个元素的属性,在最后一个元素后面添加“.”然后再加上属性的名称。比如表达式“root/a/b/c.name”就表示获取根元素下、a元素下、b元素下、c元素的name属性的值

Ø获取相同元素名称的值,当然是多个:要获取值的元素一定是表达式的最后一个元素,在最后一个元素后面添加“ ” 。 比 如 表 达 式 “ r o o t / a / b / d ”。比如表达式“root/a/b/d root/a/b/d”就表示获取根元素下、a元素下、b元素下的多个d元素的值的集合

Ø获取相

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值